确定C++中的类型是否为同一基础类型的别名

emc*_*sen 2 c++ templates types

我想写一个模板化的函数,它根据传入的模板类类型改变它的行为.为此,我想确定传入的类型.例如,类似这样的事情:

template <class T>
void foo() {
  if (T == int) { // Sadly, this sort of comparison doesn't work
    printf("Template parameter was int\n");
  } else if (T == char) {
    printf("Template parameter was char\n");
  }
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?

sjr*_*sjr 8

这是模板专业化的目的,搜索该术语提供了大量的例子.

#include <iostream>

template <typename T>
void foo() 
{ 
    std::cout << "Unknown type " << typeid(T).name() << "\n";
}

template<typename T>
void fooT(T const& x) { foo<T>(); }

template<>
void foo<int>()
{    printf("Template parameter was int\n");
}

template<>
void foo<char>()
{    printf("Template parameter was char\n");
}

int main()
{
    fooT(std::cout);
    fooT(5);
    fooT('a');
    fooT("Look Here");
}
Run Code Online (Sandbox Code Playgroud)