2

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

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

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

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

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

4

1 回答 1

2

1) 我看到了这种方法的一个明显优势:您总是可以在正确的位置看到已定义常量的值。即,如果常量定义为 extern,则必须将定义与初始化程序一起放在一个 cpp 文件中,并在没有值的情况下使用 extern const 保留标头,这会误导支持者。

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

2)也许另一个次要的问题是您实际上在每个翻译单元(包括头文件)中都有重复的 std::string 对象,可以将其视为缺点。

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

于 2011-07-19T20:30:26.377 回答