C++11的标准库引入了is_same<T1, T2>函数,可以通过其成员value检查类型T1与T2是否相同:
#include <iostream>
using namespace std;
template<class T>
void print(T t)
{
if(is_same<T, int>::value)
{
printf("value is:%d\n", t);
}
else if(is_same<T, const char*>::value)
{
printf("value is:%s\n", t);
}
}
int main(){
print(1);
print("hello world");
return 0;
}
运行程序输出:
value is:1
value is:hello world
对于is_same<T1, T2>::value这种写法,还有一种简化的方法:
is_same_v<T1, T2>
#include <iostream>
using namespace std;
template<class T>
void print(T t)
{
if(is_same_v<T, int>)
{
printf("value is:%d\n", t);
}
else
{
printf("value is:%s\n", t);
}
}
int main(){
print(1);
print("hello world");
return 0;
}
编译运行程序:
value is:1
value is:hello world
但是如