假设我有一个名称空间KeyManager
,我有函数press
std::vector<std::function<void()>*> functions;
void KeyManager::addFunction(std::function<void()> *listener)
{
functions.push_back(listener);
}
void KeyManager::callFunctions()
{
for (int i = 0; i < functions.size(); ++i)
{
// Calling all functions in the vector:
(*functions[i])();
}
}
我有类Car
并且在汽车的构造函数中我想将它的相对函数指针传递给类函数,如下所示:
void Car::printModel()
{
fprintf(stdout, "%s", this->model.c_str());
}
Car::Car(std::string model)
{
this->model = model;
KeyManager::addFunction(this->printModel);
}
尝试传递相对函数指针时出现以下错误:
error C3867: 'Car::printModel': function call missing argument list; use '&Car::printModel' to create a pointer to member
我该如何解决这个问题?
答案 0 :(得分:1)
您必须使用std::bind
创建一个std::function
来调用特定对象上的成员函数。这是如何工作的:
Car::Car(std::string model)
{
this->model = model;
KeyManager::addFunction(std::bind(&Car::printModel, this));
}
是否有特定原因要将std::function
作为指针传递而不是值?如果你没有绑定任何复制费用昂贵的论据,我宁愿不这样做。
此外,callFunctions
可以使用lambda简化:
void KeyManager::callFunctions()
{
for (auto & f : functions)
f();
}