我有一个 20k 已知字符串的列表,我在编译时就知道并且永远不会改变。一种不可配置的字典。我不想在运行时从文件中加载它,因为这意味着很多不必要的架构:在某个路径中查找文件、指示路径的配置文件等。
我在 C++ 中提出了这样的解决方案:
在 a.cpp 中:
std::vector<std::string> dic;
dic.reserve(20000);
#define VECTOR_DIC_ dic;
#include values.inl
#undef VECTOR_DIC_
然后在 values.inl 中,包含 20k 个 push_back 调用的列表,如下所示:
VECTOR_DIC_.push_back("string1");
VECTOR_DIC_.push_back("string2");
...
VECTOR_DIC_.push_back("string20000");
此代码在 Debian 上与 gcc-4.8 一起编译并正常工作,但无法与 gcc-4.4 一起编译,gcc-4.4 永远无法完成编译 a.cpp 文件。
为什么 gcc-4.4 不支持这种类型的大初始化?此外,在编译时是否有针对已知值进行如此大的初始化的设计模式?