可能重复:
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;不会工作,但是,有办法吗?
答案 0 :(得分:12)
您可以查看C ++ 11中的boost::is_same
或std::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),具体取决于类型A
和B
的等式
答案 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)
您可以比较typeid
和T1
T2
#include <typeinfo>
template <typename T1, typename T2> void f()
{
bool a;
if (typeid(T1) == typeid(T2))
a = true;
else
a = false;
}