概述
在C++中,“可调用对象”(Callable)是一个可以被调用的对象,它可以接受参数并产生结果。可调用对象可以是函数、函数指针、成员函数指针、lambda表达式、函数对象(functor)、以及通过 std::function 包装的任何可调用实体。
1.函数以及函数指针
函数
void Func() {
// 函数体
}
函数指针
void (*funcPtr)() = Func;
2.成员函数指针
class MyClass {
public:
void memFunc() {
// 成员函数体
}
};
// 成员函数指针
void (MyClass::*memFunc)() = &MyClass::memFunc;
3.lamda表达式
这个就不多说了,之前写过,可以去看看。
4.函数对象(Func)
struct Func{
int operator()(int x) {
return x * 3;
}
};
这个是重载了 operator() 操作符。stl里大量使用了这种写法,如下图:
5.通过 std::function 包装的可调用对象
std::function<void()> func = myFunc;
void callFun(std::function<void()> func) {
func();
}
callFun(myFunc); // 传递函数
callFun(funcPtr); // 传递函数指针
callFun(Func()); // 传递函数对象
std::function 是一个比较通用的,在stl模板中的。还有一种调用是lamda表达式的,都经常使用。
小结
这个总结写了可调用对象,C++中常用的一些调用形式。像函数,函数指针,lamda表达式(这个之前写过),函数对象,通过std::function包装的可调用对象;这些都常用,感兴趣,可以学习学习。感觉还不错,OK,翻篇。