如何function<void(string message)> somePointer;
设置为成员函数?
我在里面
class Temp {
public:
void test(string message) {}
};
我尝试somePointer = &Temp::test;
但是得到了错误。如何将somePointer绑定到某个类的成员函数?
答案 0 :(得分:5)
您无法将该函数签名(function<void(string)>
)绑定到该成员函数。因为该成员函数需要Temp
类的实例才能调用它。如果您要绑定特定的Temp
实例,则可以执行此操作。例如,使用lambda。
Temp x;
function<void(string)> somePointer = [&x](string message) {
x.test(message);
};
你也可能使用std::bind
,但我只是弄乱了语法,因为我很少看到任何理由在lambdas存在的情况下使用它。
答案 1 :(得分:2)
使用std::bind
:
std::function<void(std::string message)> somePointer =
std::bind((&Temp::test, instance_of_Temp, std::placeholders::_1);
您也可以使用lambda:
std::function<void(std::string message)> somePointer =
[&instance_of_temp](std::string message){instance_of_temp.test(message);}