プロが教えるわが家の防犯対策術!

環境:VisualStudio2005, WinXP

以下のようなことは可能でしょうか?
・ある型の変数をそれが何型であるかを判定→例えばintとかcharとかchar *とか

概念としてはこんな感じです。

template<class Type>
void func( Type a )
{
  // 型を判定
  switch( GetTypeChack(a) ){
  case BOOL:
  case INT:
  case CHAR:
  case FLOAT:
    ・
    ・
  }
}

A 回答 (3件)

if (typeid(Type) == typeid(int))


 ...

のようにすれば実現はできますが、このような型スイッチは最悪の設計です。
ある程度共通部分があるからテンプレートにしているのであれば、型によって処理を変えるべきところだけを別の関数にするなりすれば済むことです。

template <class Type>
void func(Type a)
{
 ...
 sub(a);
 ...
}

void sub(int a);
void sub(char a);
...
    • good
    • 1
この回答へのお礼

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

お礼日時:2008/02/10 18:09

typeid() って標準だっけ?

    • good
    • 1
この回答へのお礼

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

お礼日時:2008/02/10 18:08

template の意味ないんじゃ?関数オーバーロードで



void func(bool a) {}
void func(char a) {}
...

を用意すれば済む話でないの?
    • good
    • 1
この回答へのお礼

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

※どうでもいい補足ですがGetTypeChackはGetTypeCheckの打ち間違いです。。

お礼日時:2008/02/09 15:31

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A