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

Это следующий вопрос к этому вопросу: Лямбда, как передать в качестве параметра

MSDN предположительно пометил элемент как исправлено. Я просмотрел спецификации, но у меня возникли проблемы с преобразованием их спецификаций в то, что должно быть синтаксисом.

Так, например:

void printOut(int(*eval)(int))
{
    for(int x = 0; x < 4; ++x)
    {
        std::cout << eval(x) << std::endl;
    }
}

Теперь предположим, что у меня есть лямбда:

auto lambda1 = [](int x)->int{return x;};

Какой синтаксис нужно преобразовать lambda1 в эквивалент функционального указателя, чтобы его можно было передать в printOut ?

Кроме того, как насчет лямбда-выражений, у которых что-то есть в скобках? Например:

int y = 5;
auto lambda2 = [y](void)->int{return y;};

Если этот тип лямбда не может быть преобразован в указатель на функцию, существует ли альтернативный метод для передачи этого типа лямбда-выражения в printOut (или даже модифицированную версию ] printOut , если да, то какой синтаксис)?

22
задан Community 23 May 2017 в 11:45
поделиться