2011-09-16 13 views
1

C++コードは、パラメータのランタイムクラスを印刷するtypeidを使用して、以下の:テンプレートメソッドでtypeidを使用しているときにC4100警告を取り除くにはどうすればよいですか?

#include <iostream> 

class Foo 
{ 
}; 

class Bar: public Foo 
{ 
}; 

template <class O> void printTypeName(O& object) 
{ 
    std::cout << typeid(object).name(); 
} 

int main(void) 
{ 
    Bar x; 
    printTypeName(x); 
} 

Fooが多型ではないので、VS C++タイプ情報を決定するためにオブジェクトを使用し

を上昇させません

C4100警告(「参照されていない仮パラメータ」)。

単純なメソッド呼び出しでオブジェクト型を出力する可能性を残しつつ、警告を取り除く方法はありますか?私は警告を無効にする必要はありません。

+0

は、[Gでは正常に動作++](http://www.ideone.com/yDKIq)。 – iammilind

+0

非ポリモーフィック型に 'typeid'を適用すると、警告を表示するのが良いと思います。 'Foo'に仮想デストラクタを追加してみてください。 MSVCが警告を省略した可能性があります。 –

+0

@Johannes非多型型に 'typeid'を適用すると何が問題になりますか? –

答えて

0

これにはUNREFERENCED_PARAMETERマクロがあります。 OP編

==== :1も

(void) object;

を使用して、(それについての彼のコメントのためにデビッド・ロドリゲスにクレジット)マクロを使用して回避することができます。

+2

あるいは、標準的なアプローチは、 '(void)object;'どこかで定義されているマクロに依存しないものです。 –

+0

なぜ '(void)'を追加するのですか? –

+0

@quant_dev:潜在的な "文は効果がありません"という警告を抑止する方法でなければなりません。 – UncleBens

2

あなたが完了したら、再び、警告をオフにしてする

#pragma warning(disable : 4100) 
//.. stuff 
#pragma warning(default : 4100) 

を使用することができます。

+0

私が知っている;-)残酷な方法はありますか? –

+0

'default'を使うのは良い考えではありません - http://stackoverflow.com/q/4193476 – sharptooth

+0

@sharptooth:その質問は投稿された答えには全く理由がありません。 – Puppy

-1

これがエラーなしで私の作品:

template <typename T> 
void prn(const T&){ 
    std::cout << typeid(T).name() << std::endl; 
} 
+0

多型の情報は失われます。 –

関連する問題