col*_*mik 3 c++ enums class redefinition
我有以下课程:
class washm_t
{
public:
enum door_t { closed = 0, open = 1 };
private:
door_t door_state ;
public:
int open() ;
};
Run Code Online (Sandbox Code Playgroud)
该类的问题是该open名称被定义为类内部方法的名称和枚举类型的值.
问题是:我可以以某种方式修改代码,以便两个open名称在类内部工作,或者我应该为open()方法或open枚举类型值选择一些其他名称?
这是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 ;
}
Run Code Online (Sandbox Code Playgroud)
在C++ 11中,您可以使用enum class:
enum class door_t { closed = 0, open = 1 };
Run Code Online (Sandbox Code Playgroud)
但是你必须提到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 };
};
Run Code Online (Sandbox Code Playgroud)
您可以将其设置为嵌套类,或者在之前定义它washm_t并将其用作基类
class washm_t : public door_state {
int open();
};
Run Code Online (Sandbox Code Playgroud)
现在该成员open()重写了枚举器,但枚举器仍然可用door_state::open,并且closed仍然可以使用与以前相同的语法.
| 归档时间: |
|
| 查看次数: |
3357 次 |
| 最近记录: |