• ベストアンサー

C++にてtemplateで受け取った任意の型の変数が何型であるかを判定したい

環境:VisualStudio2005, WinXP 以下のようなことは可能でしょうか? ・ある型の変数をそれが何型であるかを判定→例えばintとかcharとかchar *とか 概念としてはこんな感じです。 template<class Type> void func( Type a ) {   // 型を判定   switch( GetTypeChack(a) ){   case BOOL:   case INT:   case CHAR:   case FLOAT:     ・     ・   } }

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

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

if (typeid(Type) == typeid(int))  ... のようにすれば実現はできますが、このような型スイッチは最悪の設計です。 ある程度共通部分があるからテンプレートにしているのであれば、型によって処理を変えるべきところだけを別の関数にするなりすれば済むことです。 template <class Type> void func(Type a) {  ...  sub(a);  ... } void sub(int a); void sub(char a); ...

noname#88356
質問者

お礼

ありがとうございます。とても勉強になりました。

その他の回答 (2)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

typeid() って標準だっけ?

noname#88356
質問者

お礼

あっ!そういえばそれがありましたね。忘れてました。。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

template の意味ないんじゃ?関数オーバーロードで void func(bool a) {} void func(char a) {} ... を用意すれば済む話でないの?

noname#88356
質問者

お礼

なるほど!その手がありましたか。確かにそうですね。 しかし同じことを何度も書きたくないこともあるので聞いておきたいのですが、 型の判定というのをオーバーロード以外の方法でやったりするのは可能なのでしょうか? ※どうでもいい補足ですがGetTypeChackはGetTypeCheckの打ち間違いです。。