在命名空间中包装消息常量

时间:2011-07-19 20:15:35

标签: c++ namespaces linkage

我有一系列与消息ID对应的常量字符串;我正在尝试为这些常量创建一个集中的位置,因为它们在我的应用程序中的各个类中使用。我原本打算创建一个包含它们的命名空间:

// MessageIDs.hh
namespace MessageIDs {
  const std::string kMessage1("Message1");
  ...
}

然后我开始阅读内部/外部链接定义,现在我有几个问题。

1)唯一的缺点是不能使常量extern因为它们将具有内部链接而不能将它们用作模板参数吗?

2)我不知道的方法还有其他任何缺点吗?

1 个答案:

答案 0 :(得分:2)

1)我看到这种方法的一个明显优势:你总能在正确的位置看到定义常量的值。即如果将常量定义为extern,则必须将定义与初始化器一起放在一个cpp文件中,并将头部保留为extern const而不使用值,这会误导支持者。

您提到的缺点(无法将它们用作模板参数)实际上是次要的,您是否经常需要std :: string模板参数?我没有看到那些谢天谢地。

2)也许另一个小问题是你在每个翻译单元中都有重复的std :: string对象,包括头文件,人们可以认为它是一个缺点。

在字符串常量的这种特殊情况下,看起来const char *是全案例最佳解决方案。