В основном это вопрос о читабельности, стиле, производительности двух разных подходов к созданию/передаче функтора, который указывает на метод-член из конструктора/метода класса.
Подход 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:: placeholders:: _ 1), и lambda избегает этой проблемы.
Наконец, я должен отметить, что для целей этого вопроса some_method - большая функция, которая делает много вещей, и было бы болью, чтобы непосредственно скопировать в тело лямбда.
Если этот вопрос кажется слишком расплывчатым, тогда мы можем сосредоточиться на ответах на различия в производительности, если они есть.
EDIT: нетривиальный прецедент.
MyClass::MyClass()
: some_member_( CALLBACK_FUNCTOR )
{}
Как вы можете видеть, CALLBACK_FUNCTOR, используемый в списке инициализаторов (определенный с помощью подхода 1 или 2), затрудняет область применения декларации использования (afaik), и, очевидно, мы не будем беспокоиться о переносе метода-члена, который мы намеревались называть прямым прочь.