[c++] std::function
C++에서는 함수를 이용하여 객체를 저장하거나 전달할 수 있는 std::function
템플릿 클래스를 제공합니다. 이 클래스는 함수포인터, 함수 객체, 멤버 함수 포인터, 람다 표현식 등 다양한 형태의 함수를 저장할 수 있어 매우 유용합니다.
기본 사용법
다음은 std::function
을 사용하여 함수를 저장하고 호출하는 간단한 예제입니다.
#include <iostream>
#include <functional>
int add(int a, int b) {
return a + b;
}
int main() {
std::function<int(int, int)> func = add; // add 함수를 저장
std::cout << func(10, 20) << std::endl; // 저장된 함수 호출
return 0;
}
위 예제에서는 std::function
템플릿을 사용하여 add
함수를 저장하고 호출하였습니다.
람다 표현식 저장
std::function
은 람다 표현식도 저장할 수 있습니다. 다음은 람다 표현식을 std::function
에 저장하는 예제입니다.
#include <iostream>
#include <functional>
int main() {
std::function<int(int, int)> func = [](int a, int b) {
return a * b;
};
std::cout << func(10, 20) << std::endl; // 람다 표현식으로 정의된 함수 호출
return 0;
}
함수 포인터 저장
함수 포인터를 std::function
에 저장하는 것도 가능합니다. 다음은 함수 포인터를 std::function
에 저장하는 예제입니다.
#include <iostream>
#include <functional>
void printHello() {
std::cout << "Hello, world!" << std::endl;
}
int main() {
std::function<void()> func = &printHello; // 함수 포인터를 저장
func(); // 저장된 함수 포인터 호출
return 0;
}
std::function
을 사용하면 다양한 형태의 함수를 일관된 방식으로 저장하고 호출할 수 있어 매우 편리합니다.
참고 자료
- cppreference - std::function
- C++ Programming Language - Bjarne Stroustrup