类名和枚举值之间的冲突:无需命名空间即可解析

clash between class name and enum value: resolvable without namespaces?

本文关键字:命名空间 冲突 枚举 之间      更新时间:2023-10-16
class cippa{};
enum close{ cippa };
int main(){
    new cippa();    //bad here
}

使用::cippa也无济于事。有没有办法在不将enumclass放在单独的namespace中的情况下解决此问题?

使用 new class cippa 消除歧义。如果在同一作用域中声明类名和枚举器(或函数/变量)名,则隐藏该类名。您可以通过 class name .如果类型名称是枚举名称,则相同。您可以通过enum name访问它

#include <unistd.h>
// oops, close is now hidden! but we know a trick..
enum close c = cippa;

使用 C++11,如果你这样做

class cippa;
enum class close { cippa };

那么类 cippa 和枚举值close::cippa就不会冲突。

顺便说一下,这本质上是在做

class close{
public:
  enum enum_t{cippa};
};

但是,您需要使用 close::enum_t 来访问枚举类型,而不是closeclose::cippa保持不变。