• ベストアンサー

テンプレート内で型判別

テンプレートTが void f(T data){  if(data == "int"){  }else{  } } このように有るのですが、このf()の中で自分が呼ばれた時の型を判別して処理を分けたいです。 f()の中に何を書いてもf()以外を変更しないなら無理なんでしょうか? テンプレートを無しにしても型判別の方法さえ分かりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

1. int を特別視しないように処理を組むよう修正 2. 無理な場合、テンプレート(クラス)を int で特殊化 3. typeid を利用 if(typeid(data) == typeid(int)) ※コンパイラによっては、RTTI(実行時型識別)の設定を ONにする必要があります。

sruhit
質問者

お礼

ありがとうございます。 if(typeid(data) == typeid(int)) で判別できました。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> このf()の中で自分が呼ばれた時の型を判別して処理を分けたいです。 判別したい型は、静的な型でしょうか、それとも動的な型でしょうか。それによって実現方法が変わります。 静的な型の判別は、テンプレートの特殊化を使うのが普通です。ただし、関数の場合は部分特殊化ができないので、いったんクラスを介すなどの工夫が必要です。 動的な型の場合、typeidやdynamic_castを使う必要があります。可能であれば、判別対象のクラスに仮想関数を仕込んでおくのが一番簡単です。

関連するQ&A