- ベストアンサー
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: ・ ・ } }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
if (typeid(Type) == typeid(int)) ... のようにすれば実現はできますが、このような型スイッチは最悪の設計です。 ある程度共通部分があるからテンプレートにしているのであれば、型によって処理を変えるべきところだけを別の関数にするなりすれば済むことです。 template <class Type> void func(Type a) { ... sub(a); ... } void sub(int a); void sub(char a); ...
その他の回答 (2)
- koko_u_
- ベストアンサー率18% (459/2509)
typeid() って標準だっけ?
お礼
あっ!そういえばそれがありましたね。忘れてました。。
- koko_u_
- ベストアンサー率18% (459/2509)
template の意味ないんじゃ?関数オーバーロードで void func(bool a) {} void func(char a) {} ... を用意すれば済む話でないの?
お礼
なるほど!その手がありましたか。確かにそうですね。 しかし同じことを何度も書きたくないこともあるので聞いておきたいのですが、 型の判定というのをオーバーロード以外の方法でやったりするのは可能なのでしょうか? ※どうでもいい補足ですがGetTypeChackはGetTypeCheckの打ち間違いです。。
お礼
ありがとうございます。とても勉強になりました。