Как добавить подпредставление внутри основного вида в Swift [закрыто]

Это правильное поведение.

std::bind нуждается в этой слабости , чтобы соответствовать ее собственной спецификации.

Рассмотрим std::placeholders, который используется для отметьте параметры, которые передаются связанной функции.

using std::placeholders;
std::function<void(int)> f2 = std::bind( F, _1 );
//  Parameter 1 is passed to                ^^
//  the bound function.

f2(7); // The int 7 is passed on to F

Аналогично, для второго параметра _3 для [3] имеется _2 и т. д.

Это вызывает интересный вопрос. Как должен функционировать этот объект функции?

auto f3 = std::bind( F, _3 );

Как вы можете себе представить, он выполняет свое собственное обещание передать третий параметр в F. Это означает, что он ничего не делает для первых двух параметров.

f3(10, 20, 30); // The int 30 is passed on to F. The rest?  Ignored.

Итак, это ожидаемое поведение и, возможно, единственная «функция», которая std::bind выполняется над lambdas, даже в C ++ 14 и C ++ 17.

Объект, созданный std::bind предназначен для принятия и игнорирования любых посторонних параметров.

13
задан Ashish Kakkad 21 July 2014 в 23:18
поделиться