是否可以实现一个容器,它可以保存POD元素并在编译时分配静态存储器初始化?

Yen*_*nvY 3 c++

例如,像map这样的对象包含20000个条目.在运行时不调用insert方法,在编译时初始化其元素,并将此映射写入二进制文件,就像全局int数组一样.

iam*_*ind 5

编译时间:
不使用运行时map::insert():是的

使用C++ 11,您可以声明并初始化全局对象.

#include<map>
std::map<int, int> m = {{0,0}, {1,1}, {2,2}};
int main () {}
Run Code Online (Sandbox Code Playgroud)

在一些全局对象构造函数中,您可以将其写入map文件.

struct Global {
  Global (const char* fileName) {
    std::ofstream file(fileName);
    for(auto pair : m)
      // insert operation
  }
}
g_Initialize("xyz.txt");
Run Code Online (Sandbox Code Playgroud)

因此,在main()运行之前你已准备好了.

执行此操作时,请注意静态初始化顺序fiasco.

更新:std::map只是一个方便的例子.这里的关键是使用std::initializer_list.您也可以使用自定义类.