Как объявить функцию, которая принимает лямбду?

Я прочитал в Интернете много учебных руководств, которые объяснили, как использовать лямбды со стандартной библиотекой (такой как std::find), и они все были очень интересны, но я не мог найти никого, который объяснил, как я могу использовать лямбду для своих собственных функций.

Например:

int main()
{
    int test = 5;
    LambdaTest([&](int a) { test += a; });

    return EXIT_SUCCESS;
}

Как я должен объявить LambdaTest? Каков тип его первого аргумента? И затем, как я могу назвать передачу анонимной функции ему - например - "10" как ее аргумент?

75
задан Thomas Bonini 30 May 2010 в 12:20
поделиться

2 ответа

Учитывая, что вы, вероятно, захотите также принимать указатели на функции и объекты функций в дополнение к лямбда-выражениям, вы, вероятно, захотите использовать шаблоны для принятия любого аргумента с помощью оператора operator () . Это то, что делают такие std-функции, как find. Это будет выглядеть так:

template<typename Func>
void LambdaTest(Func f) {
    f(10);
}

Обратите внимание, что это определение не использует никаких функций c ++ 0x, поэтому оно полностью обратно совместимо. Это только вызов функции с использованием лямбда-выражений, специфичных для C ++ 0x.

70
ответ дан 24 November 2019 в 11:37
поделиться

Если вы не хотите создавать шаблон для всего, вы можете сделать следующее:

void LambdaTest (const std::function <void (int)>& f)
{
    ...
}
65
ответ дан 24 November 2019 в 11:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: