私は次のものを持っています:
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 ::_objへのコールバックとしてClassB::Juggle()メンバー関数を指定したいと思います。C ++ 11でそれを行う適切な方法は(ClassBのコンストラクターで):
ClassB::ClassB()
{
_obj.OnDoSomethingCool(
[&](const std::string& arg) -> bool
{
return Juggle(arg);
});
}
私が理解していることから、コンパイラーは上記のラムダコードからstd::functionオブジェクトを作成します。したがって、コールバックが呼び出されると、std :: function :: operator()メンバーが呼び出され、ClassB :: Juggle()を直接呼び出す代わりに、ClassB :: Juggle()が呼び出されます。私が裏で何が起こっているかについて間違えない限り、それはすべて少し非効率的であるように思われます。もっと良い方法はありますか?