У меня есть следующее :
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 (). напрямую. Если я не ошибаюсь насчет того, что происходит под одеялом, все это кажется немного неэффективным. Есть ли способ лучше?