在 C++ 中创建全局和静态字符串表的正确方法是什么?
“全局”是指:可用于包含标题的任何文件。但不是某些运行时创建的单对象对象的一部分。
“静态”是指:尽可能少的运行时间设置。只读存储器页中的数据。每个应用只有 1 个数据实例。
“字符串”是指:以空字符结尾的字符数组很好。 std::string 会很好,但我认为不能按照上述方式完成。对吗?
“表”是指:我的意思是一个可索引的数组。所以我想这不是一张 table 本身。但我在这一点上很灵活。开放的想法。
“C++”是指:C++ 不是 C。(更新:C++98,不是 C++11)
最佳答案
strings.h
extern const char* table[];
strings.cpp
const char* table[] = {
"Stack",
"Overflow",
}
对此的另一种看法,使用查找表的错误代码:
err.h
#define ERR_NOT_FOUND 0x1004
#define ERR_INVALID 0x1005
bool get_err_msg(int code, const char* &msg);
err.cpp
typedef struct {
int errcode;
const char* msg;
} errmsg_t;
static errmsg_t errmsg_table[] = {
{ERR_NOT_FOUND, "Not found"},
{ERR_INVALID, "Invalid"}
};
#define ERRMSG_TABLE_LEN sizeof(errmsg_table)/sizeof(errmsg_table[0])
bool get_err_msg(int code, const char* &msg){
msg = NULL;
for (int i=0; i<ERRMSG_TABLE_LEN; i++) {
if (errmsg_table[i].errcode == code) {
msg = errmsg_table[i].msg;
return true;
}
}
return false;
}
main.cpp
#include <stdio.h>
#include "err.h"
int main(int argc, char** argv) {
const char* msg;
int code = ERR_INVALID;
if (get_err_msg(code, msg)) {
printf("%d: %s\n", code, msg);
}
return 0;
}
我确信有更多的 C++ 方法可以做到这一点,但我确实是一名 C 程序员。
关于c++ - 静态字符串文字表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14208412/