std :: function可以是类数据成员吗?

时间:2018-03-20 17:52:13

标签: c++ function class

我有以下简单的代码:

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的特殊限制是什么?

1 个答案:

答案 0 :(得分:2)

你的语法错了。在定义template<class R, class... Args> class CallBack - R匹配int(int,int)Args...为空。

如果你想要CallBack

这个签名,你必须做这样的事情
CallBack<int,int,int> x(tmp);