Лямбда-выражение может быть передано как указатель функции?

Я пытаюсь передать лямбда-выражение функции, которая берет указатель функции, это даже возможно?

Вот некоторый пример кода, я использую VS2010:

#include <iostream>
using namespace std;

void func(int i){cout << "I'V BEEN CALLED: " << i <<endl;}

void fptrfunc(void (*fptr)(int i), int j){fptr(j);}

int main(){
    fptrfunc(func,10); //this is ok
    fptrfunc([](int i){cout << "LAMBDA CALL " << i << endl; }, 20); //DOES NOT COMPILE
    return 0;
}
29
задан Xeo 19 December 2011 в 00:54
поделиться

3 ответа

В VC10 RTM нет - но после того, как функция лямбда-выражений в VC10 была завершена, стандартный комитет действительно добавил язык, который позволяет лямбда-выражениям без сохранения состояния преобразовываться в указатели на функции. Так что в будущем это будет возможно.

26
ответ дан 28 November 2019 в 01:45
поделиться

Вы можете использовать std::function для этого:

void fptrfunc(std::function<void (int)> fun, int j)
{
    fun(j);
}

Или полностью перейти к generic:

template <typename Fun>
void fptrfunc(Fun fun, int j)
{
    fun(j);
}
14
ответ дан 28 November 2019 в 01:45
поделиться

Нет. Оно не может. По крайней мере, не надежно. Я знаю, что VS2010 реализует их как объектные функторы. В зависимости от того, как они работают, это может быть априорным требованием.

0
ответ дан 28 November 2019 в 01:45
поделиться
Другие вопросы по тегам:

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