【问题标题】:Where to store Class Specific named constants in C++在 C++ 中存储类特定命名常量的位置
【发布时间】:2010-07-21 13:34:13
【问题描述】:

如果你的类有一些命名常量,那么存储常量的最佳做法是什么:

选项 1:类标头中的命名空间

所以在我的班级标题中我会有:

class myClass
{
...
...
};

namespace NamedConstants
{
   const string Bucket = "Bucket";
}

选项 2 成员常量

class MyClass {      // this goes in the class
private:                          // header file
  static const string Bucket;
  ...
};

...并在类实现文件中:

const string MyClass::Bucket = "Bucket";

我实际上更喜欢选项 1,因为它更简洁:变量名和值一起出现。另外,如果你给命名空间一个好名字,那么当你使用常量时它可以使代码更具可读性:

TrafficLight::Green

与选项 2 相比,有人认为此方法有任何问题吗?

【问题讨论】:

标签: c++ class namespaces constants


【解决方案1】:

如果字符串是为了让类的用户看到/使用,你不会考虑将它们设为private 类成员。所以我得出结论,它们不应该被班级的用户看到/使用。但是,将它们放在标题中根本没有意义。

如果您将它们放入类中(或放入标题中的命名空间范围),那么对其类型和标识符的所有更改将强制客户端重新编译他们的代码。

如果您将它们放入类的实现文件,它们是类实现的私有细节,对它们的更改只会强制重新编译类的实现.
如果将它们放入未命名的命名空间,它们就不能与任何其他名称发生冲突:

namespace  {
  namespace NamedConstants
  {
     const string Bucket = "Bucket";
  }
}

【讨论】:

  • 未命名命名空间是否不会使其“更全球化”(因为需要更好的词)
  • 它使该实现文件私有。
  • @David:这样我们就不会误解 - 未命名的命名空间将在类的 implementation 文件中,而不是在其标题中。
  • 好东西 - 已经回答了我的问题 - 谢谢
【解决方案2】:

选项 1 可以为每个包含标题的文件生成一个单独的字符串对象。因此,这取决于您的资源有多稀缺。

【讨论】:

  • 但是,如果我放入 CPP 文件,我不会有这个问题吧?
猜你喜欢
  • 2010-12-07
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 2010-09-19
  • 2014-11-25
  • 2013-05-10
  • 1970-01-01
相关资源
最近更新 更多