在不知道类型时调用模板方法

时间:2012-11-22 17:34:31

标签: c++ templates

我有template method,但我不知道这种类型。我已经设法获得了对象的类型,现在我最终得到了大if-else循环

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

是否有template trick可以避免这么大的if loop。我的代码现在变得非常难看。

2 个答案:

答案 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>() {

}