Вы должны использовать специализацию шаблона для достижения этой цели:
/* template declaration - no definition (you can add a definition as default
for unknown types if you want)
*/
template<class T> void print(T val);
// This will be used if the parameter is of type int
template<>
void print<int>(int val) {
val += 2;
cout << val << endl;
}
// This will be used if the parameter is of type string
template<>
void print<std::string>(std::string val) {\
val += "string";
cout << val << endl;
}
В качестве альтернативы, вы можете просто написать перегрузки для каждого типа, который вы хотите обрабатывать:
// This will be used if the parameter is of type int
void print(int val) {
val += 2;
cout << val << endl;
}
// This will be used if the parameter is of type string
void print(std::string val) {\
val += "string";
cout << val << endl;
}
Шаблонный подходпреимущество в том, что вы можете определить реализацию по умолчанию, которая обрабатывает все типы, для которых вы не написали реализацию вручную.Если вам это не требуется, то подход с перегрузкой проще и безопаснее.