如何在 Visual C++ 中编译期间输出编译时数值常量?

发布于 2024-11-03 07:56:33 字数 500 浏览 1 评论 0原文

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) 输出到编译器输出中。看起来像#pragma message 仅接受字符串。

如何输出编译时数字常量?

Visual C++ has #pragma message that outputs a string into compiler output. Now I have a factory:

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

and I want to output the size of class that is passed to new (namely sizeof( CComObject<Type> ) into the compiler output. Looks like #pragma message only accepts strings.

How can I output a compile-time numeric constant?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

來不及說愛妳 2024-11-10 07:56:33

如果我正确理解你的问题,那么我认为你可以这样做:

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) 的值将在编译期间打印为警告消息。


请参阅这个小演示:http://www.ideone.com/Diiqy

查看这些消息(来自上面的链接):

prog.cpp:在成员函数中
'溢出::运算符 char() [与
无符号整数大小= 4u]':
程序.cpp:在
成员函数
'溢出::运算符 char() [与
无符号整数大小= 12u]':
程序.cpp:
在成员函数中
'溢出::运算符 char() [与
无符号整数大小= 400u]':

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


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

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

If I understood your question correctly, then I think you can do this:

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;
}

The value of sizeof(CComObject<Type>) will be printed as warning messages during compilation.


See this small demo : http://www.ideone.com/Diiqy

Look at these messages (from the above link):

prog.cpp: In member function
‘overflow::operator char() [with
unsigned int size = 4u]’:
prog.cpp: In
member function
‘overflow::operator char() [with
unsigned int size = 12u]’:
prog.cpp:
In member function
‘overflow::operator char() [with
unsigned int size = 400u]’:

In Visual Studio, you can see these messages in the Build Output tab; it may not appear in Error List > Warnings tab.


The idea is taken from my another solution:

Calculating and printing factorial at compile time in C++

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文