我有template method
,但我不知道这种类型。我已经设法获得了对象的类型,现在我最终得到了大if-else
循环
if ( type == "char") {
templateMethod<char>();
} else if ( type == "int" ) {
templateMethod<int>();
}
.....
是否有template trick
可以避免这么大的if loop
。我的代码现在变得非常难看。
答案 0 :(得分:2)
您几乎不需要在C ++中明确确定对象的类型。这正是模板旨在帮助您的。
您只提供了一小部分代码,但我认为最容易解决问题的方法是让templateMethod将您当前确定类型的对象作为参数,即使它不会使用该对象。
所以而不是:
template <typename T> void templateMethod() {
// ...
}
// later
if ( type_of_x == "char") {
templateMethod<char>();
} else if ( type_of_x == "int" ) {
templateMethod<int>();
}
这样做:
template <typename T> void templateMethod(T x) {
// ...
}
// later
templateMethod(x);
这将导致编译器自动调用templateMethod
,模板类型T
等于x
的类型,这是您当前代码中尝试确定的变量{{1}}的类型。
答案 1 :(得分:0)
模板专业化:
template <typename T> void templateMethod() {}
template <> void templateMethod<char>() {
}
template <> void templateMethod<int>() {
}