std::bind
возвращает вам функциональный объект, который игнорирует любой аргумент, не имеющий связанного заполнителя. Это свободная спичка.
Например:
auto f = []{}; // no arguments, do nothing
f(1); // obviously ill-formed
auto g = std::bind(f);
g(); // okay, calls f()
g(1); // okay, calls f()
g(1, 2); // okay, calls f()
В вашем примере у вас есть function<void(int)>
, который вы инициализируете результатом вызова std::bind()
без заполнителей. Это отлично работает. Аргумент int
function
просто игнорируется. Это может или не может быть то, что вы на самом деле хотите сделать, но это совершенно правильный код.
<ч />
С лямбдой вы можете получить тот же эффект, написав:
callback c = [&test](int){ test.testfunc(); };
Здесь мы должны явно указать параметр, тогда как с bind
он неявно игнорировался.