【发布时间】:2018-03-20 17:52:12
【问题描述】:
我有以下简单的代码:
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的属性?
在我的 main 中,我可以实例化一个 std::function<int(int,int)> 类型的对象,那么有什么区别?他们对std::function有特殊限制吗?
【问题讨论】:
-
什么是类属性?
-
试试这个
return myFunc( std::forward<Args>(args...) ); -
你打错了:
CallBack<int(int,int)>应该是CallBack<int, int, int>。 -
或者你的班级应该是
template <typename > class CallBack; template<class R, class... Args> class CallBack<R(Args...)> {/*..*/}; -
@Jarod42:你说得对,我试图模仿 std::function 但只是忘记了它的声明的结尾......