所谓的callable object,表示可以被某种方式调用其某些函数的对象。它可以是:
- 一个函数
- 一个指向成员函数的指针
- 一个函数对象,该对象拥有operator()
- 一个lambda表达式,严格的说它是一种函数对象
void func(int x, int y){
}
auto l = [](int x, int y){
};
class C{
public:
void operator()(int x, int y) const {}
void memfunc(int x, int y)const {}
};
int main(){
C c;
std::shared_ptr<C> sp (new C);
std::bind(func, 77, 33);
std::bind(l, 77, 33);
std::bind(C(), 77, 33);
std::bind(&C::memfunc, c, 77, 33)();
std::bind(&C::memfunc, sp, 77, 33)();
std::async(func, 77, 33);
std::async(l, 77, 33);
std::async(C(), 77, 33);
// std::async(&C::memfunc, &c, 77, 33)();
// std::async(&C::memfunc, sp, 77, 33)();
}