0

我有template method,但我不知道类型。我以某种方式设法获得了对象的类型,现在我得到了if-else像这样的大循环

if ( type == "char") {
    templateMethod<char>();
} else if ( type == "int" ) {
    templateMethod<int>();
}
.....

有没有什么template trick可以避免这么大if loop的。我的代码现在变得非常丑陋。

4

2 回答 2

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,即当前代码中您试图确定其类型的变量。

于 2012-11-22T17:40:56.367 回答
0

模板专业化:

template <typename T> void templateMethod() {}

template <> void templateMethod<char>() {

}

template <> void templateMethod<int>() {

}
于 2012-11-22T17:44:08.387 回答