如何创建字符串表

How to create a string table

本文关键字:字符串 创建 何创建      更新时间:2023-10-16

奇怪的是,几乎没有关于这个主题的在线文档。 我有一个应用程序,其中包含用于 UI 的硬编码字符串以及分散在源代码中的各种其他内容。 我正在尝试至少收集其中的一些,因为其中一些需要根据应用程序的编译平台进行更改。

我在这里使用了第二个示例(复制如下以供参考),但它对它应该如何实际工作的细节有些轻。 似乎一切都在project_strings.cpp中重新初始化,并且从未实际调用过代码。

// in your project_strings.h
namespace MyProjectStrings {
const char *password;
...
}
// the project_strings.cpp for the strings
#include "project_strings.h"
namespace MyProjectStrings {
const char *password = "Password:";
...
}
// some random user who needs that string
#include "project_strings.h"
std::string password(MyProjectStrings::password);

有人可以解释一下或告诉我这是一个糟糕的主意,我应该做点别的事情吗?

您链接的示例只是在头文件的命名空间中声明一些const char*,然后在.cpp文件中定义它们。但是,C++使用的语法不正确 - 头文件中的声明应该是extern const char*而不是const char*,因为const值默认为C++中的内部链接。

大多数编译器/链接器工具链C++会将来自一个翻译单元(project_strings.cpp)的所有字符串放在生成的可执行文件的只读数据段中。

这是处理静态字符串的一种合理、简单的方法,尽管如果您需要处理本地化或其他复杂性,您可能希望一些更动态/更复杂的东西。