1

奇怪的是,几乎没有关于这个主题的在线文档。我有一个应用程序,其中包含用于 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);

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

4

1 回答 1

0

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

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

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

于 2015-04-22T15:04:20.160 回答