【发布时间】:2012-08-07 20:54:55
【问题描述】:
在 C++03 中,可以通过将 strongly typed enum 放入类(或命名空间)中来模拟它:
struct MyEnum
{
enum enumName
{
VALUE_1 = 1,
VALUE_2,
};
};
并使用它:
MyEnum::enumName v = MyEnum::VALUE_1;
是否可以在 C 中做类似的事情?如果是,怎么做?
我试过这样,但当然不行:
struct A
{
enum aa
{
V1 = 5
};
};
int main()
{
A::aa a1 = A::V1;
enum A::aa a2 = A::V1;
struct A::aa a3 = A::V1;
return 0;
}
【问题讨论】:
-
C 中没有命名空间和类 - 所以你不能......
-
C99 中的可变参数宏可能与一些事情有关,通过将范围运算符替换为下划线。但在普通的 C89 中,我认为这是不可能的。
-
@AJG85:C 中的结构与 C++ 中的结构不同,在 C++ 中它们是类,而在 C 中它们不是。
-
@Morwenn C99 解决方案很好
-
@tuxtimo:实际上,C 确实为标识符提供了四种不同的命名空间。一个用于标签,一个用于结构、联合和枚举标签,一个用于结构和联合成员,最后一个用于所有其他标识符,包括枚举常量.