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テンプレート型で自動的に呼び出します。Tx

于 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 に答える