以下代码有效:
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值而不是使用成员函数,则会出现同样的问题。
答案 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)> >
。