模板函数可以比较两个类型名吗?

Hai*_*ang 8 c++

可能重复:
用于在c ++中实现is_same_type类型特征的程序

我希望我的模板函数根据两个类型名是否相等来做不同的事情:

template <typename T1, typename T2> f()
{
  if (T1==T2) ...;
  else ...;
}
Run Code Online (Sandbox Code Playgroud)

我知道"如果(T1 == T2)"不会起作用,但是,有没有办法做到这一点?

Cyg*_*sX1 12

您可以检查boost::is_samestd::is_same在C++ 11.

所以,它会是这样的:

template <typename T1, typename T2> f()
{
  if (boost::is_same<T1,T2>::value) ...;
  else ...;
}
Run Code Online (Sandbox Code Playgroud)


tem*_*boy 5

#include <type_traits>

template <typename A, typename B> void f() {

    if ( std::is_same<A, B>::value ) {

        //

    }

}
Run Code Online (Sandbox Code Playgroud)

std::is_same返回一个typedef布尔值 (true, false) 取决于类型的相等性AB


Sto*_*ica 1

专门化模板

template<typename T1, typename T2>
void f()
{
  //The else part goes here
}

template<typename T>
void f()
{
  //The if part goes here
}
Run Code Online (Sandbox Code Playgroud)