【发布时间】:2018-07-30 20:05:11
【问题描述】:
使用向量来安排类的方法调用的方法是什么。我想要一个方法向量,如下所示:
class Model {
using task_t = std::function<void()>;
std::vector<std::vector<task_t>> _frameTasks;
void add_function() { _frameTasks[3].push_back(&(this->function()); }
void function() {std::cout << "hi"; }
void step() {
for (auto task : _frameTasks[3]) task();
}
}
但是编译器抱怨:
error: ISO C++ forbids taking the address of a bound member function to form a pointer to member function.
我该如何解决这个问题或正确的方法是什么?
【问题讨论】:
-
你需要使用
std::bind,看这里:stackoverflow.com/questions/37636373/… -
函数指针写成
&Model::function。 (但它的类型是void(Model::*)()) -
使用
void add_function() { _frameTasks[3].push_back(std::bind(&Model::function, this)); } -
或者忘记所有关于
std::bind并使用push_back( [this](){ function(); } )。而且通常更喜欢for ( auto&& var : range )而不是for ( auto var : range )。 -
@aschepler 哦,这是一个很好的解决方案,谢谢!
标签: c++