정의:
std::invoke(callable, args...)는 callable이라는 호출 가능한 객체에 대해, 그 인자들을 전달하여 호출하는 역할을 한다.
호출 가능한 객체란?
장점:
#include <functional>
#include <iostream>
int square(int x) {
return x * x;
}
int main() {
int result = std::invoke(square, 5); // square(5)를 호출 -> 25
std::cout << "square(5): " << result << "\\n";
return 0;
}
#include <functional>
#include <iostream>
struct Calculator {
int add(int a, int b) const { return a + b; }
};
int main() {
Calculator calc;
// 멤버 함수 포인터 선언: Calculator의 const 멤버 함수 add를 가리킴
int (Calculator::*addPtr)(int, int) const = &Calculator::add;
// std::invoke를 사용하여 calc 객체의 add 함수를 호출
int result = std::invoke(addPtr, calc, 3, 4); // calc.add(3,4) 호출
std::cout << "calc.add(3, 4): " << result << "\\n";
return 0;
}
std::invoke(addPtr, calc, 3, 4);
#include <functional>
#include <iostream>
struct Calculator {
int add(int a, int b) const { return a + b; }
};
int main() {
Calculator calc;
Calculator* pCalc = &calc;
int (Calculator::*addPtr)(int, int) const = &Calculator::add;
// 객체 포인터를 이용해 호출: std::invoke가 내부적으로 pCalc->*addPtr 형태로 호출함.
int result = std::invoke(addPtr, pCalc, 10, 20);
std::cout << "pCalc->add(10, 20): " << result << "\\n";
return 0;
}
std::invoke(addPtr, pCalc, 10, 20);
#include <functional>
#include <iostream>
int main()
{
auto lamda = [](int x, int y){ return x > y};
int sum = std::invoke(lamda, 10 ,20);
std::cout << "Lamda sum :" << sum << "\\n" ;
return 0;
}