boost ::赋值gcc4.6无法正常工作的大型地图的静态初始化

时间:2013-06-19 08:04:37

标签: c++ gcc boost

我有一个大型数据地图,使用python自动生成,使用boost::assign进行初始化,如下所示:

const my_large_map_type map_data = boost::assign::map_list_of(key1, type)
     (key2, type)
     (key3, type)
     (key4, type)
     // Lots of stuff
     (key6000, type)
     ;

这在使用GCC 4.3时工作正常,该文件在几秒钟内编译完成。

我刚刚尝试使用德州仪器(TI)为ARM处理器提供的GCC编译器4.6.3编译相同的文件。

不幸的是,这个文件的编译永远不会完成,不会发出任何错误。

这是GCC编译器4.6.3的已知问题吗?

有没有其他方法可以初始化大地图?我目前无法使用C ++ 11。

1 个答案:

答案 0 :(得分:0)

这可能是初始化顺序错误吗?如果这是一个静态数据结构,并且您从另一个静态数据结构(在开始main()之前运行)的构造函数中引用它,那么它可能尚未初始化。是否在您到达main()时创建了数据?

设置初始化的另一种方法是动态创建它,但将其设置在按需初始化的静态变量中,例如

static my_large_map_type& getMap() {
  static my_large_map_type gMap;
  if (gMap.empty()) {
    gMap = boost::assign::map_list_of(key1, type)
     (key2, type)
     ... ;
  }
  return gMap;
}