在名称空间中包装消息常量
Wrapping message constants in namespace
我有一系列与消息id对应的常量字符串;我试图为这些常量创建一个集中的位置,因为它们在我的应用程序中的各种类中使用。我本来打算创建一个包含它们的命名空间:
// MessageIDs.hh
namespace MessageIDs {
const std::string kMessage1("Message1");
...
}
然后我开始阅读关于内部/外部链接的定义,现在我有几个问题。
1)唯一的缺点是不使常数外部的事实,我将无法使用它们作为模板参数,因为他们将有内部链接?
2)我的方法还有其他我不知道的缺点吗?
1)我看到了这种方法的一个明确的优点:您总是在正确的位置看到定义的常量的值。也就是说,如果常量定义为extern,则必须将这些定义与初始化器一起放在一个cpp文件中,并在头文件中留下extern const,而不留下值,这会误导支持者。
您提到的缺点(无法将它们用作模板参数)实际上是一个次要问题,您是否经常需要std::string模板参数?谢天谢地,我还没有看到这些。
2)也许另一个小问题是,实际上在包括头文件在内的每个翻译单元中都有重复的std::string对象,可以认为这是一个缺点。
在这个字符串常量的特殊情况下,看起来const char*是所有情况下的最佳解决方案。
相关文章:
- boost::进程间消息队列引发错误
- 如何在c++17中制作一个模板包装器/装饰器
- 在线编译器中的分段C++没有打印消息
- C++错误消息*成员参考.**初学者*
- std::vector的包装器,使数组的结构看起来像结构的数组
- 如何在c++迭代器类型中包装std::chrono
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 用pybind11包装C++抽象类时出错
- 为左值和右值的包装器实现C++范围
- C结构,其指针将被包装在unique_ptr中
- 如何通过参数抛出错误消息
- 如何包装第三方DLL在R中使用
- 从服务器传输到客户端的消息不会出现
- ROS2 动态消息模板
- 在消息中包装数据的开销
- 如何在WinApi C++包装器中处理消息
- 在名称空间中包装消息常量
- 协议缓冲区——我们可以从c++ protobuf消息包装器中获得.proto消息描述符吗?