存储在向量中的 C++ std::function 不起作用
Posted
技术标签:
【中文标题】存储在向量中的 C++ std::function 不起作用【英文标题】:C++ std::function stored in vector doesn't work 【发布时间】:2016-01-17 10:39:40 【问题描述】:以下代码有效:
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
参与?第二个在最后一行代码之前有一个错误,并且该错误不需要涉及vector
。检查std::function<void(float)> f2 = f;
我猜MyClass::doSomething
不需要两个浮点数?
请发帖MCVE
【参考方案1】:
因为你说std::function
对象有一个参数,但是你在调用函数对象时没有提供参数。事实上,std::bind
返回的可调用对象不接受任何参数,所以std::function
对象也不应该:
std::vector<std::function<void()> > list;
【讨论】:
【参考方案2】:好吧,vector 中的函数类型需要一个你没有给出的浮点数。请改用std::vector<std::function<void(void)> >
。
【讨论】:
以上是关于存储在向量中的 C++ std::function 不起作用的主要内容,如果未能解决你的问题,请参考以下文章