Стандартная функция std function

std::function в C++ представляет собой универсальную обертку над функциями и лямбда-выражениями, позволяющую хранить функциональные объекты разных типов и вызывать их с различными сигнатурами. Она является частью библиотеки STL и введена в стандарте C++11.

Одной из основных целей использования std::function является создание функциональных объектов, которые можно передавать другим функциям в качестве аргументов или хранить в контейнерах, таких как векторы или списки.

Прежде чем перейти к примерам кода, рассмотрим основные аспекты использования std::function.

  1. Объявление std::function:
<pre><code class="cpp">std::function<void(int)> func;
</code></pre>
  1. Присваивание функции или лямбда-выражения:
<pre><code class="cpp">void printNumber(int num) {
    std::cout << "Number: " << num << std::endl;
}

auto lambda = [](int num) {
    std::cout << "Lambda: " << num << std::endl;
};

func = printNumber; // Присваиваем функцию
func(42); // Вызываем функцию

func = lambda; // Присваиваем лямбда-выражение
func(42); // Вызываем лямбда-выражение
</code></pre>
  1. Возвращаемая функция:
<pre><code class="cpp">std::function<int()> getIncrementFunction(int incrementBy) {
    return [incrementBy]() mutable {
        static int counter = 0;
        counter += incrementBy;
        return counter;
    };
}

auto incrementFunction = getIncrementFunction(5);
std::cout << incrementFunction() << std::endl; // Выведет 5
std::cout << incrementFunction() << std::endl; // Выведет 10
std::cout << incrementFunction() << std::endl; // Выведет 15
</code></pre>
  1. Проверка на пустую функцию:
<pre><code class="cpp">std::function<void(int)> func;
if (func.empty()) {
    std::cout << "Empty function" << std::endl;
}
</code></pre>
  1. Сравнение std::function:
<pre><code class="cpp">std::function<void(int)> func1 = printNumber;
std::function<void(int)> func2 = printNumber;

if (func1 == func2) {
    std::cout << "Equal" << std::endl;
} else {
    std::cout << "Not equal" << std::endl;
}
</code></pre>
  1. Условное выполнение std::function:
<pre><code class="cpp">bool condition = true;

std::function<void(int)> func = (condition) ? printNumber : lambda;

func(42); // Вызовет либо printNumber, либо lambda в зависимости от значения condition
</code></pre>
  1. Пример использования std::function с алгоритмами STL:
<pre><code class="cpp">std::vector<int> numbers = {1, 2, 3, 4, 5};

std::function<bool(int)> isEven = [](int num) {
    return num % 2 == 0;
};

auto evenNumbers = std::count_if(numbers.begin(), numbers.end(), isEven);
std::cout << "Even numbers count: " << evenNumbers << std::endl;
</code></pre>

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

Похожие вопросы на: "std function "

Печать в Python
Самая быстрая платформа развертывания - Vercel
Таймер с функциями обратного отсчета и секундомером
Popper: взрывной эффект для шоу на вечеринках и мероприятиях
Пожалуйста, выберите действительный интерпретатор Python
Drop Table SQL - Учимся удалять таблицы в SQL
Spicetify - настройка и улучшение Spotify
SQLCMD: инструмент командной строки для работы с базами данных
Работа с датами и временем в Pandas