6

Visual C++ には、文字列をコンパイラ出力に出力する#pragma message機能があります。今、私は工場を持っています:

template<class Type>
CComPtr<Type> CreateComObject()
{
   CComPtr<Type> newObject( new CComObject<Type> );
   //do some tuning to the object
   return newObject;
}

そして、渡されたクラスのサイズを出力したいnew(つまり、コンパイラ出力に。文字列のみを受け入れるsizeof( CComObject<Type> )ように見えます。#pragma message

コンパイル時の数値定数を出力するにはどうすればよいですか?

4

1 に答える 1

7

あなたの質問を正しく理解していれば、次のことができると思います。

template<size_t size> 
struct overflow{ operator char() { return size + 256; } }; //always overflow
//if you doubt, you can use UCHAR_MAX +1 instead of 256, to ensure overflow.

template<class Type>
CComPtr<Type> CreateComObject()
{
   CComPtr<Type> newObject( new CComObject<Type> );
   char(overflow<sizeof(CComObject<Type>)>());
   return newObject;
}

の値は、sizeof(CComObject<Type>)コンパイル中に警告メッセージとして出力されます。


この小さなデモを参照してください: http://www.ideone.com/Diiqy

これらのメッセージを見てください (上記のリンクから):

prog.cpp: メンバー関数 'overflow::operator char() [with unsigned int size = 4u ]':
prog.cpp: In member function 'overflow::operator char() [with unsigned int size = 12u ]':
prog.cpp: メンバー関数 'overflow::operator char() [with unsigned int size = 400u ]':

Visual Studio では、 [ビルド出力] タブにこれらのメッセージが表示されます。[エラー リスト] > [警告] タブに表示されない場合があります。


アイデアは私の別の解決策から取られています:

C++ でのコンパイル時の階乗の計算と出力

于 2011-04-25T06:24:18.900 に答える