牛、豚、鶏、どれか一つ食べられなくなるとしたら?

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

A 回答 (2件)

1. int を特別視しないように処理を組むよう修正


2. 無理な場合、テンプレート(クラス)を int で特殊化
3. typeid を利用
if(typeid(data) == typeid(int))
※コンパイラによっては、RTTI(実行時型識別)の設定を
ONにする必要があります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/04 03:03

> このf()の中で自分が呼ばれた時の型を判別して処理を分けたいです。



判別したい型は、静的な型でしょうか、それとも動的な型でしょうか。それによって実現方法が変わります。

静的な型の判別は、テンプレートの特殊化を使うのが普通です。ただし、関数の場合は部分特殊化ができないので、いったんクラスを介すなどの工夫が必要です。

動的な型の場合、typeidやdynamic_castを使う必要があります。可能であれば、判別対象のクラスに仮想関数を仕込んでおくのが一番簡単です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!