想象我有以下自由函数和函子:
void myFreeFunction(void)
{
cout << "Executing free function" << endl;
}
struct MyFunctor
{
void operator()(void)
{
cout << "Executing functor" << endl;
}
};
正如所描述的这个答案 https://stackoverflow.com/a/1174193/849083,我可以将我的函数或函子作为模板参数传递给另一个函数:
template <typename F>
void doOperation(F f)
{
f();
}
然后调用:
doOperation(myFreeFunction);
doOperation(MyFunctor());
到目前为止,一切都很好。但如果我想要类似下面的东西怎么办:
template<typename Callback>
class MyClass
{
private:
Callback mCallback;
public:
MyClass(){}
void execute()
{
mCallback();
}
};
在这种情况下,我在声明类时指定函数/函子,但直到稍后才调用它。它适用于函子:
MyClass<MyFunctor> myClass1;
myClass1.execute();
但不适用于函数:
MyClass<myFreeFunction> myClass2;
myClass2.execute();
编译器说:
错误 C2923:“MyClass”:“myFreeFunction”不是参数“Callback”的有效模板类型参数
这很公平……但是你会如何构建它呢?
Note:我知道 std::function 并且最终可能会使用它。不过它的速度明显慢一些,所以我正在考虑所有的选择。
Thanks,
David