Указание функции-члена в качестве обратного вызова в C++11

У меня есть следующее :

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. Будет ли правильным способом сделать это в С++ 11 (в конструкторе ClassB ):

ClassB::ClassB()
{
    _obj.OnDoSomethingCool(
        [&](const std::string& arg) -> bool
        {
            return Juggle(arg);
        });
}

. Насколько я понимаю, компилятор создаст объект функции std ::из приведенного выше лямбда-кода. Таким образом, когда вызывается обратный вызов, он вызывает член std ::function ::operator (), а затем вызывает ClassB ::Juggle ()вместо вызова ClassB ::Juggle (). напрямую. Если я не ошибаюсь насчет того, что происходит под одеялом, все это кажется немного неэффективным. Есть ли способ лучше?

5
задан luke 7 May 2012 в 16:13
поделиться