在Visual C+;中编译期间如何输出编译时数值常量+;? VisualC++有代码>语法>消息>代码>。现在我有一个工厂: template<class Type> CComPtr<Type> CreateComObject() { CComPtr<Type> newObject( new CComObject<Type> ); //do some tuning to the object return newObject; } 模板 CComPtr CreateComObject() { CComPtr newObject(新CComObject); //对对象进行一些调整 返回newObject; }
我想将传递给在Visual C+;中编译期间如何输出编译时数值常量+;? VisualC++有代码>语法>消息>代码>。现在我有一个工厂: template<class Type> CComPtr<Type> CreateComObject() { CComPtr<Type> newObject( new CComObject<Type> ); //do some tuning to the object return newObject; } 模板 CComPtr CreateComObject() { CComPtr newObject(新CComObject); //对对象进行一些调整 返回newObject; },c++,visual-c++,compile-time,compile-time-constant,C++,Visual C++,Compile Time,Compile Time Constant,我想将传递给new(即sizeof(CComObject)的类的大小输出到编译器输出中。看起来#pragma message只接受字符串 如何输出编译时数值常量?如果我正确理解了您的问题,那么我认为您可以这样做: template<size_t size> struct overflow{ operator char() { return size + 256; } }; //always overflow //if you doubt, you can use UCHAR_MAX
new
(即sizeof(CComObject)
的类的大小输出到编译器输出中。看起来#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;
}
模板
结构溢出{operator char(){返回大小+256;}};//始终溢出
//如果您有疑问,可以使用UCHAR_MAX+1而不是256,以确保溢出。
模板
CComPtr CreateComObject()
{
CComPtr newObject(新CComObject);
字符(溢出());
返回newObject;
}
编译期间,sizeof(ccombject)
的值将作为警告消息打印出来
请参阅此小演示: 查看这些消息(从上面的链接): prog.cpp:在成员函数中 '溢出::运算符char() 无符号整数size=4u]':
prog.cpp:In 成员函数 '溢出::运算符char() 无符号整数size=12u]':
prog.cpp: 在成员函数中 '溢出::运算符char() 无符号整数大小=400u]': 在Visual Studio中,您可以在“生成输出”选项卡中看到这些消息;它可能不会出现在“错误列表”>“警告”选项卡中
这个想法来自我的另一个解决方案:
@Nawaz,+1回答得很好,但它会对所有编译器发出一致的编译警告吗?(对任何其他编译器来说,这难道不是一个错误或被忽略的消息吗?@iammilind:既然保证了溢出,那么所有体面的编译器都会生成这些警告消息(在我看来)。如果
char
大于8位,则不需要溢出。@Dennis Zickefoose:char
的最大值可以是255,这是标准本身定义的。因此它将溢出。(或者,如果你不满意,你可以使用UCHAR\u MAX+1
而不是魔法数字256
)@Nawaz:char的最大值肯定不是由标准定义的,只是大小是(1
)。我手头没有VC,但对于GNU和clang,一个简单的std::enable\u if\u t
完成任务。