c++ - 如何创建字符串表

标签 c++ string string-table

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

我用了第二个例子here (在下面复制以供引用)但它对实际工作方式的细节有所了解。似乎所有内容都在 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) 的所有字符串放在生成的可执行文件的只读数据段中。

这是处理静态字符串的一种合理、简单的方法,但如果您需要处理本地化或其他复杂情况,您可能需要更动态/更复杂的方法。

关于c++ - 如何创建字符串表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29800551/

相关文章:

javascript - 来自字符串的 Jquery JSON 数组

c++ - 拆分读取文件 C++

c++ - 在非实例化函数模板中用作默认参数的不存在标识符

java初学者: print two dimensional array element in a String

linux - 区分ELF文件中的.shstrtab和.strtab

c++ - MFC - 手动扩展stringtable

java - Java 和 .NET 字符串文字驻留在哪里?

c++ - 为什么计算AVL树的高度时要加1?

c++ - Visual Studio 在进行文件管理操作时在哪里搜索txt 文件?

java - 将一个 StringBuilder 附加到另一个 StringBuilder