C++ - 함수 템플릿의 포인터를 함수로 받기

출처

C++11 이상 가능.

// 템플릿의 default 값에 함수 포인터 타입을 정의
template<typename T, typename Func = T(*)(T, T)>
constexpr T
calc(T a, T b, Func func){
    return func(a, b);
}

template<typename T>
constexpr T
plus(T a, T b){
    return a + b;
}

struct minus{
    template<typename T>
    constexpr T
    operator ()(T a, T b) const{
        return a - b;
    }
};


int main()
{
    static_assert(plus(1, 2) == 3, "");
    static_assert(calc(1, 2, &plus<int>) == 3, "");
    static_assert(calc(1, 2, &plus) == 3, "");
    static_assert(calc(1, 2, minus{}) == -1, "");   // ok
    return 0;
}

이 글은 2020-07-23에 작성되었습니다.