我尽量保持局部性,所以我把枚举放在类范围内,即使它们在两个类之间共享(我把它放在类中,用它“变得更好”。)这很有效, 但我最近遇到了一个问题,如果我将枚举放在类范围内,就会发生循环依赖。
枚举将成为多个类的构造函数参数,它所在的类(以及对其所在的最有意义的类)包括这些类。因此,不可能将枚举用作所包含类的构造函数参数,因为它会导致循环依赖。
将这个枚举放在它自己的头文件中会更好吗?如果是这样,我是否应该将所有枚举放在头文件中以保持一致?这个问题是否还有其他解决方案(合乎逻辑的)?
最佳答案
从 C++11 开始,您可以使用 enum class
(或 enum struct
- 相同的东西,声明不同),其中枚举值的范围为枚举的名字。例如,这是一个有效的 C++11 声明。
enum class token_type {
open_paren,
close_paren,
identifier
};
但是,要访问枚举的值,您必须使用 ::
运算符正确地限定它的范围。因此,这是 C++11 中的有效赋值:
token_type type = token_type::close_paren;
但这不是:
token_type type = close_paren;
这解决了命名冲突,意味着您不必使用容器命名空间或结构来阻止值范围泄漏到它们不应该泄漏的地方。这意味着以下枚举可以存在于与 token_type
相同的范围内:
enum class other_enum {
block,
thingy,
identifier
};
现在两个不同结构中称为identifier
的两个值不会相互干扰。
关于c++ - 枚举范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1738260/