std::invoke в C++ 🔥 Сегодня разберём мощный инструмент из стандартной библиотеки —
std::invoke. Многие его игнорируют, но он может упростить вызов функций и методов, особенно в шаблонном коде. 📌 Что такое
std::invoke? std::invoke — это универсальный механизм вызова вызываемых объектов (callable). Он может вызывать: ✅ Обычные функции
✅ Лямбды
✅ Функторы
✅ Указатели на методы и данные
🔹 Пример использования:
#include <iostream>
#include <functional>
struct Foo {
void method(int x) {
std::cout << "Method called with " << x << '\n';
}
};
void function(int x) {
std::cout << "Function called with " << x << '\n';
}
int main() {
Foo foo;
// Вызов обычной функции
std::invoke(function, 42);
// Вызов метода класса через объект
std::invoke(&Foo::method, foo, 24);
// Вызов метода через указатель на объект
Foo* ptr = &foo;
std::invoke(&Foo::method, ptr, 77);
return 0;
}
🔥 Чем
std::invoke полезен? ✅ Универсальность: избавляет от необходимости писать отдельные
if constexpr для разных callable объектов. ✅ Чистый код: особенно полезен в шаблонных алгоритмах, где callable передаётся как параметр.
👉 @Bookflow
