我有以下简单的代码:
template<class R, class... Args> class CallBack {
protected:
std::function<R(Args...)> myFunc;
public:
CallBack(std::function<R(Args...)> funcIn) : myFunc(funcIn) {}
virtual ~CallBack() {}
R call(Args... args) {
return myFunc(args...);
}
};
int main() {
std::function<int(int,int)> tmp = [](int y, int z){return y + z + 2;};
CallBack<int(int,int)> x(tmp);
std::cout << x.call(12, 7);
return 0;
}
然而,它只是不起作用。我明白了:
../src/main.cpp:17:28: error: function returning a function
std::function<R(Args...)> myFunc;
^
我检查了std :: function的原型,它是一个简单的类,为什么我不能将它用作我的类CallBack
的属性?
在我的主要内容中,我可以实现std::function<int(int,int)>
类型的对象,那么有什么区别?他们对std::function
的特殊限制是什么?
答案 0 :(得分:2)
你的语法错了。在定义template<class R, class... Args> class CallBack
- R
匹配int(int,int)
和Args...
为空。
如果你想要CallBack
:
CallBack<int,int,int> x(tmp);