类枚举的正确位置

时间:2012-05-16 05:53:01

标签: c++ class enums

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

Entity {
public:
  enum DistributionType {NORM, UNIFORM_INT, UNIFORM_SPECIFIED, BINOMIAL };
  distributionType ds;
...
}

我想将DistributionType值作为构造函数的参数:

Entity salesVolume = new Entity(Entity::DistributionType.NORM);

但是这不起作用(我猜它在传递int值时会期望DistributionType吗?)

调用构造函数的正确方法是什么?枚举值是同一个类的一部分?我可以通过类型转换为int来实现,但这似乎不是很紧。我也可以从类中排除枚举并单独定义它(我已经看过) - 这是一种更常见的方法吗?

谢谢你们

3 个答案:

答案 0 :(得分:1)

使用枚举,没有“命名空间”,所以你需要这个:

Entity* salesVolume = new Entity(Entity::NORM);

C ++ 11提供“枚举类”或"strongly typed enums"来解决这种奇怪现象。它还允许您将枚举名称用作传统枚举的“范围”,因此您也可以这样做:

Entity* salesVolume = new Entity(Entity::DistributionType::NORM); // C++11 only

答案 1 :(得分:1)

您可以将其称为Entity::NORM,或更明确地(在C ++ 11中),Entity::DistributionType::Norm

然而,在风格上,这不是Java。您使用自动变量(在堆栈上创建的变量),您展示的代码将比使用C ++中的自然编码方式更慢并且可能泄漏内存。您的代码也将无法编译,因为new为您提供了指向该对象的指针。但是,而不是

Entity * salesVolume = new Entity(Entity::NORM);

体型

Entity salesVolume(Entity::NORM);

答案 2 :(得分:0)

你能不能得到什么错误,因为这段代码应该有用,只有问题是:

  1. 您已将ds定义为distributionType,而它应为DistributionType(大写“D”)。
  2. 实体salesVolume =新实体(Entity :: DistributionType.NORM);应该替换为
  3. Entity * salesVolume = new Entity(Entity :: Entity.NORM);

    请注意sa之前的“*”; esvolume。即你必须将它声明为指针。