- ベストアンサー
テンプレート内で型判別
テンプレートTが void f(T data){ if(data == "int"){ }else{ } } このように有るのですが、このf()の中で自分が呼ばれた時の型を判別して処理を分けたいです。 f()の中に何を書いてもf()以外を変更しないなら無理なんでしょうか? テンプレートを無しにしても型判別の方法さえ分かりません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
1. int を特別視しないように処理を組むよう修正 2. 無理な場合、テンプレート(クラス)を int で特殊化 3. typeid を利用 if(typeid(data) == typeid(int)) ※コンパイラによっては、RTTI(実行時型識別)の設定を ONにする必要があります。
その他の回答 (1)
- jacta
- ベストアンサー率26% (845/3158)
回答No.2
> このf()の中で自分が呼ばれた時の型を判別して処理を分けたいです。 判別したい型は、静的な型でしょうか、それとも動的な型でしょうか。それによって実現方法が変わります。 静的な型の判別は、テンプレートの特殊化を使うのが普通です。ただし、関数の場合は部分特殊化ができないので、いったんクラスを介すなどの工夫が必要です。 動的な型の場合、typeidやdynamic_castを使う必要があります。可能であれば、判別対象のクラスに仮想関数を仕込んでおくのが一番簡単です。
お礼
ありがとうございます。 if(typeid(data) == typeid(int)) で判別できました。