[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을 사용하면 다양한 형태의 함수를 일관된 방식으로 저장하고 호출할 수 있어 매우 편리합니다.

참고 자료