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:在成员函数'overflow::operator char() [with unsigned int size = 12u ]':
prog.cpp:在成员函数'overflow::operator char() [with unsigned int size = 400u ]'中:

在 Visual Studio 中,您可以在Build Output选项卡中看到这些消息;它可能不会出现在错误列表 > 警告选项卡中。


这个想法来自我的另一个解决方案:

在 C++ 编译时计算和打印阶乘

于 2011-04-25T06:24:18.900 回答