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

C++ std::function stored in vector doesn't work

以下代码有效:

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 绑定到浮点值而不是使用成员函数,也会出现同样的问题。

因为你说std::function对象有一个参数,但是你在调用函数对象的时候没有提供参数。事实上,std::bind 返回的可调用对象不 接受任何参数,因此 std::function 对象也不应该:

std::vector<std::function<void()> > list;

好吧,vector 中的函数类型需要一个你没有提供的浮点数。尝试使用 std::vector<std::function<void(void)> > 代替。