Тип черты:
#include <iostream>
#include <type_traits> // C++0x
//#include <tr1/type_traits> // C++03, use std::tr1
template<typename T>
void printType(T param)
{
if(std::is_same<T,char*>::value)
std::cout << "char*" << endl;
else if(std::is_same<T,int>::value)
std::cout << "int" << endl;
else
std::cout << "???" << endl;
}
Или еще лучше, просто перегрузите функцию:
template<class T>
void printType(T partam){
std::cout << "???" << endl;
}
void printType(char* partam){
std::cout << "char*" << endl;
}
void printType(int partam){
std::cout << "int" << endl;
}
Частичное упорядочение позаботится о том, чтобы была вызвана правильная функция. Кроме того, перегрузка предпочтительнее специализации шаблона в общем случае, см. this и this artice , почему. Может не подходить для вас, если вы полностью должны печатать тип, поскольку для перегруженных функций рассматриваются неявные преобразования.