具有方法和枚举类型的类——方法和枚举值可以有相同的名称
C++, class with method and enum type - can method and enum value have same names?
我有以下类:
class washm_t
{
public:
enum door_t { closed = 0, open = 1 };
private:
door_t door_state ;
public:
int open() ;
};
类的问题是open
名称被定义为类内部方法的名称和枚举类型的值。
问题是:我是否可以以某种方式修改代码,以便open
名称在类内部工作,或者我是否应该为open()
方法或open
enum类型值选择其他名称?
open()
函数是这样的:
int washm_t::open()
{
if(door_state == open) // ~fails, 'open' interpreted as name of method
// not as name of enum type value
return 1 ;
else
return door_state = open, 0 ;
}
在c++ 11中可以使用enum class
:
enum class door_t { closed = 0, open = 1 };
但是你必须参考door_t::open
而不是简单的open
。这有冗长的优点和缺点。enum class
在这些可能发生名称冲突的情况下是很好的,它有效地为枚举的枚举数添加了一个泛型前缀。
(实际上,在c++ 11中不需要使用class
关键字。只需引用door_t::open
即可解决冲突,无需其他更改。
您可以在c++ 03中通过将enum
放入class
(因此c++ 11功能的语法)来达到类似的解决方案
struct door_state {
enum door_t { closed = 0, open = 1 };
};
你可以使它成为一个嵌套类,或者在washm_t
之前定义它并将其用作基类
class washm_t : public door_state {
int open();
};
现在成员open()
覆盖了枚举数,但枚举数仍然作为door_state::open
可用,closed
仍然可用,使用与以前相同的语法
如何将枚举大写,或者给它们一个合理的前缀?
enum door_t { CLOSED = 0, OPEN = 1 };
enum door_t { door_closed = 0, door_open = 1 };
不能在同一名称空间或作用域下使用相同名称的符号。编译器无法区分两者
这里的问题是编码约定。对于命名常量,我通常更喜欢使用大写字母,比如enums
enum door_t { CLOSED = 0, OPEN = 1 };
相关文章:
- 枚举环境变量的惯用C++14/C++17方法
- 枚举元组类型的最佳方法?
- 基于枚举参数调用专用模板方法
- 替换枚举以最大化编译时间检查的最佳方法
- 将枚举与 CMake 链接的正确方法是什么?
- 为什么方法重载或枚举标志定义会触发 gcc7.2 编译器警告?
- 如何将枚举传递给方法而不将其作为整数传递
- 我的私有方法如何在C++中访问公共枚举
- 枚举器 C++ 的 setter 和 getter 方法
- 一种创建将字符串常量返回给枚举的类的廉价方法,反之亦然
- 有没有一种方法可以在基于枚举的可变参数模板函数之间进行选择,这比将函数包装在结构中更简单
- 如何定义在外部类之外返回枚举黑客的嵌入式类的方法?
- 是否有一种有效的,适当的方法将非常大的公共班级枚举放在利用它们的公共方法之下,以使代码更加干净
- 具有枚举类型类型的C 方法
- 是否可以定义一个宏来定义枚举类和返回枚举元素计数的 GetCount() 方法
- 将枚举转换为值的正确方法
- 在 .NET 中调用 COM 枚举器的正确方法是什么?
- 使用 Doxygen 或类似方法记录枚举标志
- 虚拟方法返回代表派生对象类型的枚举 - 是否可以(在设计方面)
- C 枚举类可以使用方法