12

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

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

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

我知道“if(T1==T2)”是行不通的,但是,有没有办法做到这一点?

4

5 回答 5

16

您可以在 C++11中检查boost::is_sameor 。std::is_same

所以,它会是这样的:

template <typename T1, typename T2> f()
{
  if (boost::is_same<T1,T2>::value) ...;
  else ...;
}
于 2012-11-30T22:54:40.897 回答
5
#include <type_traits>

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

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

        //

    }

}

std::is_sametypedef根据类型的相等性返回布尔值 (true, false)AB

于 2012-11-30T23:52:01.263 回答
4

如果可以推断类型并且没有显式传递,则可以创建两个单独的函数:

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

template<typename T1, typename T2>
void f(T1 x, T2 y)
{
    // ...
}
于 2012-11-30T22:55:06.780 回答
1

专门化模板

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

template<typename T>
void f()
{
  //The if part goes here
}
于 2012-11-30T22:52:34.343 回答
0

您可以比较typeidofT1T2

#include <typeinfo>

template <typename T1, typename T2> void f()
{
    bool a;
    if (typeid(T1) == typeid(T2))
        a = true;
    else
        a = false;
}
于 2012-11-30T22:55:35.070 回答