类枚举的正确位置

Right location for class enum

本文关键字:位置 枚举      更新时间:2023-10-16

我认为这更像是一个文体问题,但我有一个带有统计分布类型枚举的类(仅在此类中使用):

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);

你能请问你得到了什么错误,因为这段代码应该有效, 唯一的问题是:

  1. 您已将 ds 定义为 distributionType ,而它应该是 DistributionType(大写"D")。
  2. 实体销售额 = 新实体(实体::D分配类型.NORM); 应替换为

实体 *销售额 = 新实体(实体::实体.规范);

请注意 sa;esVolume 前面的"*"。 即您必须将其声明为指针。