Luc*_*ore 2 c++ macros coding-style namespaces c-preprocessor
编辑:我正在计划重构一些代码,并用define命名空间别名替换.我不能这样做只是因为"宏是邪恶的".我需要解释为什么我要做出改变,如果不这样做,可能会出现什么问题.
撇开"宏是邪恶的"立场,#define超过命名空间别名的垮台是什么?
拿代码
#define MY_NAMESPACE my_namespace
Run Code Online (Sandbox Code Playgroud)
与
namespace MY_NAMESPACE = my_namespace;
Run Code Online (Sandbox Code Playgroud)
拥有别名的原因不在问题的范围内.您还可以假设命名空间的名称足够独特,以至于它不会出现在其他地方(即它只是引用该命名空间,它不能 - 现在不是,不会在将来 - 引用变量或类或无论如何),所以那里不会有歧义.
在这种特殊情况下,它取决于.如果使用命名空间别名可以解决这个问题,无论如何都要将它放在宏中,这是出于所有常见原因.但两者做的完全不同.您无法使用其别名打开命名空间,即:
namespace XYZ_ver1 {}
namespace XYZ = XYZ_ver1;
namespace XYZ { // Illegal!
}
Run Code Online (Sandbox Code Playgroud)
这适用于宏; 实际上,您可以在命名空间出现之前定义宏.如果需要,则需要使用宏.
| 归档时间: |
|
| 查看次数: |
553 次 |
| 最近记录: |