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

时间:2012-11-30 22:49:12

标签: c++

  

可能重复:
  Program to implement the is_same_type type trait in c++

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

template <typename T1, typename T2> f()
{
  if (T1==T2) ...;
  else ...;
}

我知道&#34; if(T1 == T2)&#34;不会工作,但是,有办法吗?

5 个答案:

答案 0 :(得分:12)

您可以查看C ++ 11中的boost::is_samestd::is_same

所以,它会是这样的:

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

答案 1 :(得分:4)

#include <type_traits>

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

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

        //

    }

}

std::is_same返回布尔值typedef(true,false),具体取决于类型AB 的等式

答案 2 :(得分:3)

如果可以推断类型并且未明确传递,则可以创建两个单独的函数:

template<typename SameType>
void f(SameType x, SameType y)
{
    // ...
}

template<typename T1, typename T2>
void f(T1 x, T2 y)
{
    // ...
}

答案 3 :(得分:1)

专门化模板

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

template<typename T>
void f()
{
  //The if part goes here
}

答案 4 :(得分:0)

您可以比较typeidT1

T2
#include <typeinfo>

template <typename T1, typename T2> void f()
{
    bool a;
    if (typeid(T1) == typeid(T2))
        a = true;
    else
        a = false;
}
相关问题