Mep*_*ane 7 c++ include-guards
我知道为什么包含警卫,这#pragma once不是标准的,因此不受所有编译器等的支持.
我的问题是另一种:
有没有明智的理由让它们没有?我还没有遇到这样一种情况,理论上,如果不在其他地方包含文件中提供包含警卫,那将会有任何好处.有没有人有一个例子,没有它们的实际好处?
我问的原因 - 对我来说,他们似乎非常多余,因为你总是使用它们,并且行为#pragma once也可以自动应用于字面上的一切.
我已经看到了根据在包含之前定义的宏生成代码的标头.在这种情况下,它有时希望将这些宏定义为一个(一组)值,包括标题,重新定义宏,并再次包含.
每个看到这种情况的人都同意它是丑陋的并且最好避免,但有时候(如果所述标题中的代码是通过其他方式产生的话),这样做是较小的邪恶.
除此之外,我想不出一个理由.
@sbi已经讨论过代码生成,所以让我举个例子.
假设你有很多项的枚举,并且你想为它的每个元素生成一堆函数......
一种解决方案是使用这种多重包含技巧.
// myenumeration.td
MY_ENUMERATION_META_FUNCTION(Item1)
MY_ENUMERATION_META_FUNCTION(Item2)
MY_ENUMERATION_META_FUNCTION(Item3)
MY_ENUMERATION_META_FUNCTION(Item4)
MY_ENUMERATION_META_FUNCTION(Item5)
Run Code Online (Sandbox Code Playgroud)
然后人们就这样使用它:
#define MY_ENUMERATION_META_FUNCTION(Item_) \
case Item_: return #Item_;
char const* print(MyEnum i)
{
switch(i) {
#include "myenumeration.td"
}
__unreachable__("print");
return 0; // to shut up gcc
}
#undef MY_ENUMERATION_META_FUNCTION
Run Code Online (Sandbox Code Playgroud)
这是好还是坏是取决于您,但显然每次在枚举中添加新值时都不必遍历所有实用程序函数.
| 归档时间: |
|
| 查看次数: |
777 次 |
| 最近记录: |