C ++编译时类型比较

时间:2014-10-01 15:53:46

标签: c++

考虑函数foo

template <typename T>
void foo() {
    do_something();
    if (T == int) {
        do_somehting_else();
    }
}

换句话说,我希望它do_something()然后,如果类型为intdo_something_else()

当然if (T == int) {不会编译。仍然:有没有办法在C ++中比较编译时的类型?

2 个答案:

答案 0 :(得分:5)

您可以使用

#include <type_traits>

// ...

template <typename T>
void foo() {
    do_something();
    if (std::is_same<T,int>::value) {
        do_somehting_else();
    }
}

您可以详细了解类型特征here

答案 1 :(得分:5)

只需使用模板专业化。

template <typename T> void foo() { do_something(); }

template<> void foo<int>() { do_something(); do_something_else(); };