【问题标题】:Best practice to manage string literals管理字符串文字的最佳实践
【发布时间】:2018-10-01 10:30:25
【问题描述】:

在一个文件中管理字符串而不是多次写出字符串的最佳做法是什么?我的想法是创建一个简单的 string_library.h 文件,其中包含映射中的所有字符串,并方便地定义以获取名称和 ID。像这样的:

#include <string>
#include <map>

#define SENSOR1_ID 0
#define SENSOR2_ID 1

#define SENSOR1_NAME string_library[SENSOR1_ID]
#define SENSOR2_NAME string_library[SENSOR2_ID]

std::map<unsigned int, const std::string> string_library{
std::make_pair(SENSOR1_ID, "Sensor1 Name"),
std::make_pair(SENSOR2_ID, "Sensor2 HI Name")
};

这样,字符串只需写出一次,并且可以通过定义或从地图中轻松获取。该地图可能对能够在地图上进行迭代很有用,但也许其他一些构造更有意义。

【问题讨论】:

  • 您希望通过这样的解决方案解决的真正问题是什么?储存空间?帮助翻译?还有什么?
  • GNU gettext 能满足您的需求吗?
  • 我不会使用宏,而是将您的 ID/名称定义为已知命名空间内的常量静态 std::strings
  • @Someprogrammerdude 在重构应该在所有文件中保持一致的字符串时,有些人往往会被遗忘。在多个地方使用的字符串的折射应该只执行一次以排除疏忽。
  • @Madden,你能解释一下为什么它们应该是静态的吗?

标签: c++ string constants


【解决方案1】:

您可以简单地使用constexpr 变量:

constexpr auto SENSOR1_NAME = "Sensor1 Name";

不需要宏,也不需要昂贵的动态内存开销。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2017-12-01
    相关资源
    最近更新 更多