Я прочитал в Интернете много учебных руководств, которые объяснили, как использовать лямбды со стандартной библиотекой (такой как std::find
), и они все были очень интересны, но я не мог найти никого, который объяснил, как я могу использовать лямбду для своих собственных функций.
Например:
int main()
{
int test = 5;
LambdaTest([&](int a) { test += a; });
return EXIT_SUCCESS;
}
Как я должен объявить LambdaTest
? Каков тип его первого аргумента? И затем, как я могу назвать передачу анонимной функции ему - например - "10" как ее аргумент?
Учитывая, что вы, вероятно, захотите также принимать указатели на функции и объекты функций в дополнение к лямбда-выражениям, вы, вероятно, захотите использовать шаблоны для принятия любого аргумента с помощью оператора operator ()
. Это то, что делают такие std-функции, как find. Это будет выглядеть так:
template<typename Func>
void LambdaTest(Func f) {
f(10);
}
Обратите внимание, что это определение не использует никаких функций c ++ 0x, поэтому оно полностью обратно совместимо. Это только вызов функции с использованием лямбда-выражений, специфичных для C ++ 0x.
Если вы не хотите создавать шаблон для всего, вы можете сделать следующее:
void LambdaTest (const std::function <void (int)>& f)
{
...
}