Это в основном вопрос о удобочитаемости, стиле, производительности двух разных подходов к созданию / передаче функтора, который указывает на метод-член из конструктора / метода класса.
Подход 1:
using namespace std::placeholders;
std::bind( &MyClass::some_method, this, _1, _2, _3 )
Подход 2:
[ this ](const arg1& a, arg2 b, arg3& c) -> blah { some_method( a, b, c ); }
Мне было интересно если использование лямбда в этой ситуации просто бесполезно, в некоторых отношениях легче увидеть, что происходит, но тогда вы должны явно указать типы arg. Также я предпочитаю не использовать «использование пространства имен без разницы», но тогда это делает выражение привязки излишне подробным (например, _1 становится std :: placeholder :: _ 1), а лямбда позволяет избежать этой проблемы.
Наконец, я должен отметить, что для целей этого вопроса some_method - это большая функция, которая выполняет множество вещей, и было бы больно напрямую скопировать в тело лямбда.
Если этот вопрос кажется слишком расплывчатым, тогда мы можем сосредоточиться на ответах на различия в производительности, если таковые имеются.
РЕДАКТИРОВАТЬ: Нетривиальный вариант использования.
MyClass::MyClass()
: some_member_( CALLBACK_FUNCTOR )
{}
Как видите, CALLBACK_FUNCTOR, используемый в списке инициализаторов (определенный с подходом 1 или 2), затрудняет определение области действия объявления using (afaik), и, очевидно, мы не стали бы оборачивать метод-член, который мы намеревались вызвать сразу.