Visual C++ 有#pragma message
that 将字符串输出到编译器输出中。现在我有一个工厂:
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
只接受字符串。
如何输出编译时数值常量?
如果我正确理解你的问题,那么我认为你可以这样做:
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:在成员函数中
‘溢出::运算符 char() [与
无符号整数尺寸 = 4u]’:
程序.cpp:在
成员函数
‘溢出::运算符 char() [与
无符号整数尺寸 = 12u]’:
程序.cpp:
在成员函数中
‘溢出::运算符 char() [与
无符号整数尺寸=400u]’:
在 Visual Studio 中,您可以在构建输出标签;它可能不会出现在错误列表 > 警告 tab.
这个想法取自我的另一个解决方案:
在 C++ 编译时计算并打印阶乘
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)