0

Как определить анонимные функции в C++?

10

Проблема: Использование лямбда-функций в C++

Я пытаюсь понять, можно ли определять функции в C++ в виде лямбда-функций. В частности, меня интересует вопрос: как правильно использовать лямбда-функции и в каких ситуациях они могут быть предпочтительнее по сравнению с обычными функциями.

Я слышал о ключевом слове inline, но это не то, о чем я говорю. Я имею в виду именно лямбда-функции, которые позволяют создавать анонимные функции на месте.

Каковы основные преимущества и недостатки использования лямбда-функций в C++? Какие у них есть особенности, о которых стоит знать?

1 ответ(ов)

0

Прежде чем C++11, если вы хотите локализовать функцию внутри другой функции, это можно сделать следующим образом:

int foo() {
    struct Local {
        static int bar() {
            return 1;
        }
    };
    return Local::bar();
}

Или, если вам нужно что-то более сложное:

int foo(int x) {
    struct Local {
        int & x;
        Local(int & x) : x(x) {}
        int bar(int y) {
            return x * x + y;
        }
    };
    return Local(x).bar(44);
}

Однако если вы хотите создать истинный литерал функции (функцию-замыкание) в стандарте до C++11, это невозможно.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь