我有以下内容:
typedef std::function<bool (const std::string&)> SomethingCoolCb;
class ClassA
{
public:
void OnSomethingCool(const SomethingCoolCb& cb)
{
_cb = cb;
}
private:
SomethingCoolCb _cb;
};
class ClassB
{
public:
ClassB();
bool Juggle(const std::string& arg);
private:
ClassA _obj;
};
我想指定 ClassB::Juggle() 成员函数作为对 ClassB::_obj 的回调。在 C++11 中执行此操作的正确方法是(在 ClassB 的构造函数中):
ClassB::ClassB()
{
_obj.OnDoSomethingCool(
[&](const std::string& arg) -> bool
{
return Juggle(arg);
});
}
据我了解,编译器将从上述 lambda 代码中生成一个 std::function 对象。因此,当调用回调时,它将调用 std::function::operator() 成员,然后调用 ClassB::Juggle() 而不是直接调用 ClassB::Juggle()。除非我对幕后发生的事情有误解,否则这一切似乎都有点低效。有没有更好的办法?