考虑函数foo
。
template <typename T>
void foo() {
do_something();
if (T == int) {
do_somehting_else();
}
}
换句话说,我希望它do_something()
然后,如果类型为int
,do_something_else()
当然if (T == int) {
不会编译。仍然:有没有办法在C ++中比较编译时的类型?
答案 0 :(得分:5)
您可以使用
#include <type_traits>
// ...
template <typename T>
void foo() {
do_something();
if (std::is_same<T,int>::value) {
do_somehting_else();
}
}
您可以详细了解类型特征here。
答案 1 :(得分:5)
只需使用模板专业化。
template <typename T> void foo() { do_something(); }
template<> void foo<int>() { do_something(); do_something_else(); };