我有template method
,但我不知道类型。我以某种方式设法获得了对象的类型,现在我得到了if-else
像这样的大循环
if ( type == "char") {
templateMethod<char>();
} else if ( type == "int" ) {
templateMethod<int>();
}
.....
有没有什么template trick
可以避免这么大if loop
的。我的代码现在变得非常丑陋。
您几乎不需要在 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
,即当前代码中您试图确定其类型的变量。
模板专业化:
template <typename T> void templateMethod() {}
template <> void templateMethod<char>() {
}
template <> void templateMethod<int>() {
}