存储在向量中的C ++ std :: function不起作用

时间:2016-01-17 10:39:41

标签: c++ function c++11 vector bind

以下代码有效:

float value = 3.0f;
auto f = std::bind(&MyClass::doSomething, this, value);
f();

然而,只要我尝试将函数存储在std :: vector中,它就不会让我调用该函数:

float value = 3.0f;
auto f = std::bind(&MyClass::doSomething, this, value);

std::vector<std::function<void(float)> > list;
list.push_back(f);
list.back()();

这是编译器错误:

No matching function for call to object of type 'value_type' (aka 'std::__1::function<void (float)>').  Candidate function not viable: requires 1 argument, but 0 were provided.

我有一段时间没有像这样难过。如果我尝试将lambda绑定到float值而不是使用成员函数,则会出现同样的问题。

2 个答案:

答案 0 :(得分:4)

因为您说std::bind对象接受一个参数,但在调用函数对象时不提供参数。实际上,std::function 返回的可调用对象不会接受任何参数,因此std::vector<std::function<void()> > list; 对象也不应该这样:

WebGLRenderer: trying to use 26 texture units while this GPU supports only 16

答案 1 :(得分:0)

嗯,向量中的函数类型需要一个你没有给出的浮点数。请尝试使用std::vector<std::function<void(void)> >