我希望我的模板函数根据两个类型名是否相等来做不同的事情:
template <typename T1, typename T2> f()
{
if (T1==T2) ...;
else ...;
}
我知道“if(T1==T2)”是行不通的,但是,有没有办法做到这一点?
我希望我的模板函数根据两个类型名是否相等来做不同的事情:
template <typename T1, typename T2> f()
{
if (T1==T2) ...;
else ...;
}
我知道“if(T1==T2)”是行不通的,但是,有没有办法做到这一点?
您可以在 C++11中检查boost::is_same
or 。std::is_same
所以,它会是这样的:
template <typename T1, typename T2> f()
{
if (boost::is_same<T1,T2>::value) ...;
else ...;
}
#include <type_traits>
template <typename A, typename B> void f() {
if ( std::is_same<A, B>::value ) {
//
}
}
std::is_same
typedef
根据类型的相等性返回布尔值 (true, false)A
和B
如果可以推断类型并且没有显式传递,则可以创建两个单独的函数:
template<typename SameType>
void f(SameType x, SameType y)
{
// ...
}
template<typename T1, typename T2>
void f(T1 x, T2 y)
{
// ...
}
专门化模板
template<typename T1, typename T2>
void f()
{
//The else part goes here
}
template<typename T>
void f()
{
//The if part goes here
}
您可以比较typeid
ofT1
和T2
#include <typeinfo>
template <typename T1, typename T2> void f()
{
bool a;
if (typeid(T1) == typeid(T2))
a = true;
else
a = false;
}