如何使用<void(string message)=“”>绑定到成员函数?</void(string>

时间:2015-03-06 20:17:28

标签: c++ c++11

如何function<void(string message)> somePointer; 设置为成员函数? 我在里面

class Temp {
public:
void test(string message) {}
};

我尝试somePointer = &Temp::test; 但是得到了错误。如何将somePointer绑定到某个类的成员函数?

2 个答案:

答案 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);}