【发布时间】:2012-05-12 15:28:08
【问题描述】:
是否可以创建一个std::vector 来保存带有任何签名的std::function?
(函数参数都是预先绑定的。)
我尝试了std::vector<std::function<void()> >,因为如果我只有一个这种类型的std::function,我可以将任何函数绑定到它。
这似乎不适用于向量:如果我尝试将带有 std::bind 的函数添加到签名不是 void() 的向量中,我会得到:
No matching member function for call to 'push_back'
有没有办法做到这一点?
编辑:
我只记得std::function<void()> 确实允许您绑定任何返回void 的函数,只要参数预先绑定了std::bind,但它不允许您绑定任何签名,但对于我来说目的它足够通用,所以以下工作:
class A
{
public:
void test(int _a){ return 0; };
};
A a;
std::vector<std::function<void()> > funcArray;
funcArray.push_back(std::bind(&A::test, std::ref(a), 0));
【问题讨论】:
-
参数将被预先绑定
-
我可能会看到这适用于可变参数模板,但我无法提供代码。
-
你的意思是同一个向量中有多个签名吗?或者你只是在写一个通用算法。如果是后者,您可以使用模板来实现。
-
@Als 我用收到的错误消息编辑了问题
-
不要描述代码。引用它。