类枚举的正确位置
Right location for class enum
我认为这更像是一个文体问题,但我有一个带有统计分布类型枚举的类(仅在此类中使用):
Entity {
public:
enum DistributionType {NORM, UNIFORM_INT, UNIFORM_SPECIFIED, BINOMIAL };
distributionType ds;
...
}
我想将 DistributionType 值作为构造函数的参数:
Entity salesVolume = new Entity(Entity::DistributionType.NORM);
但这不起作用(我猜它在传递整数值时需要 DistributionType?
调用具有属于同一类的枚举值的构造函数的正确方法是什么?我可以通过类型转换为 int 来做到这一点,但这似乎不是很紧凑。我还可以从类中排除枚举并单独定义它(我已经看到过) - 这是一种更常见的方法吗?
谢谢大家
对于枚举,没有"命名空间",所以你需要这个:
Entity* salesVolume = new Entity(Entity::NORM);
C++11 提供了"枚举类"或"强类型枚举"来解决这种怪异问题。它还允许您使用枚举名称作为传统枚举的"范围",因此您也可以这样做:
Entity* salesVolume = new Entity(Entity::DistributionType::NORM); // C++11 only
您可以
将其称为Entity::NORM
,也可以更明确地(在 C++11 中)Entity::DistributionType::Norm
。
然而,从风格上讲,这不是Java。您展示的代码将比仅使用C++中的自然编码方式(在"堆栈上"创建的变量)更慢,并且可能会泄漏内存。你的代码也不会编译,因为new
给你一个指向对象的指针。然而,而不是
Entity * salesVolume = new Entity(Entity::NORM);
喜欢
Entity salesVolume(Entity::NORM);
你能请问你得到了什么错误,因为这段代码应该有效, 唯一的问题是:
- 您已将 ds 定义为 distributionType ,而它应该是 DistributionType(大写"D")。
- 实体销售额 = 新实体(实体::D分配类型.NORM); 应替换为
实体 *销售额 = 新实体(实体::实体.规范);
请注意 sa;esVolume 前面的"*"。 即您必须将其声明为指针。
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- 枚举成员与静态 int 成员?
- C++:枚举:错误:应使用标识符而不是"}"
- 带有 c++ 的枚举(输入检查)
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 类枚举的正确位置
- C++枚举位置混乱