🤖
LifeEXE
Udemy курс UE / C++ PatreonBoostyTelegramYouTube
  • 🤍Welcome
  • 💡Мои курсы
    • 🎮Unreal Engine — полное руководство по разработке на С++
    • 🧪Автоматизация и тестирование в Unreal Engine
    • 🐍Snake game
    • 🔊Metasounds
    • 🏗️Design patterns
    • 🕹️Game Engine hardCORE series
    • 🧠OpenAI
  • 🔗Сообщество
    • Ресуры
    • Поддержать проект
    • Проекты участников сообщества
    • Code review участников сообщества
  • 📚Образовательные ресурсы
    • Книги
      • C++
      • ООП
      • Чистый код
      • Компьютерная графика
      • Алгоритмы и структуры данных
      • Дизайн и проектирование
      • Виртуальная реальность
      • Процедурная графика
      • Функциональное программирование
      • Менеджмент проектов
      • Фундаментальное
      • Тестирование
      • Разное
    • Online
      • Unreal Engine
      • C++
      • Компьютерная графика
      • Чистый код
      • AI
      • Разное
    • Статьи
      • Code / C++
  • 👨‍💻Software
    • IDE
      • VS hotkeys
    • Unreal Engine
    • GIT
    • CI/CD
    • Tools
      • С++
      • Компьютерная графика
      • UI / UX
      • Animations
      • GameDev
      • Unreal Engine
      • Creative coding
      • Sound
      • Документация
      • Статический анализ кода
      • Тестирование
      • Автоматизация
      • Network
      • CV / ML
      • Profiling
      • Fonts
      • UML / diagrams
      • Разное
    • Free assets
  • 💾Code
    • Code style
      • .clang-format
      • .gitignore
      • UE code style
      • Code style проектов LifeEXE
    • C++
      • Const correctness
      • Использование auto
      • Lambda выражения
      • Forward declaration
      • Measure execution time
      • Immediately Invoked Lambda Expression (IILE)
    • Unreal Engine
      • Медленный ли Cast
      • UE_LOGFMT
  • ⁉️FAQ
    • Часто задаваемые вопросы
Powered by GitBook
On this page

Was this helpful?

  1. Code
  2. C++

Lambda выражения

Функиональный объект (функтор) — конструкция, позволяющая использовать объект как функцию. В C++ функтор для объявления функтора достаточно переопределить operator()

#include <iostream>
 
class Clamp
{
public:
    int operator() (int Value, int Min, int Max) const
    {
        return Value < Min ? Min : Value < Max ? Value : Max;
    }
};
 
int main()
{
    Clamp clamp;
    std::cout<< clamp(40, 0, 30) << std::endl;     // 30
    std::cout<< clamp(-1, 0, 30) << std::endl;     // 0
    std::cout<< clamp(15, 0, 30) << std::endl;     // 15
}

Предикат — подмножество функторов, в которых тип возвращаемого значения bool

#include <iostream>
#include <algorithm>
#include <vector>

class EvenNumber
{
public:
    bool operator()(int Value) const
    {
        return Value % 2 == 0;
    }
};

int main()
{
    const std::vector<int> Numbers{ 0, 1, 2, 3, 4, 5, 6, 7, 8 };
    const int Count = std::count_if(Numbers.begin(), Numbers.end(), EvenNumber());
    std::cout << Count << " even numbers ";
    std::cout << "in vector of " << Numbers.size() << " elements" << std::endl;
    // 5 even numbers in vector of 9 elements
}

Анонимная функция lambda — это краткая форма записи анонимных функторов

#include <iostream>
#include <algorithm>
#include <vector>

int main()
{
    const std::vector<int> Numbers{ 0, 1, 2, 3, 4, 5, 6, 7, 8 };
    const int Count = std::count_if(Numbers.begin(), Numbers.end(), [](int Value) { return Value % 2 == 0; });
    std::cout << Count << " even numbers ";
    std::cout << "in vector of " << Numbers.size() << " elements" << std::endl;
    // 5 even numbers in vector of 9 elements
}
#include <iostream>
#include <algorithm>
#include <vector>

int main()
{
    const std::vector<int> Numbers{ 0, 1, 2, 3, 4, 5, 6, 7, 8 };
    const auto lambdaFunc = [](int Value) { return Value % 2 == 0; };
    const int Count = std::count_if(Numbers.begin(), Numbers.end(), lambdaFunc);
    std::cout << Count << " even numbers ";
    std::cout << "in vector of " << Numbers.size() << " elements" << std::endl;
    // 5 even numbers in vector of 9 elements
}
PreviousИспользование autoNextForward declaration

Last updated 7 months ago

Was this helpful?

💾
LogoLambda expressions in C++docsmsft