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

Wrapping message constants in namespace

本文关键字:包装 消息 常量 空间      更新时间:2023-10-16

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

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

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

1)唯一的缺点是不使常数外部的事实,我将无法使用它们作为模板参数,因为他们将有内部链接?

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

1)我看到了这种方法的一个明确的优点:您总是在正确的位置看到定义的常量的值。也就是说,如果常量定义为extern,则必须将这些定义与初始化器一起放在一个cpp文件中,并在头文件中留下extern const,而不留下值,这会误导支持者。

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

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

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