Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在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 - Fatal编程技术网

在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
完成任务。