msvc2013 无法编译 header 包含大量查找的文件 table

msvc2013 can't compile header file containing huge lookup table

我有一个 header-only 库,其中包含大量 look-up table(超过一百万双)。 look-uptable定义为:

#ifndef EGM96LUT_h__
#define EGM96LUT_h__

#include <vector>

namespace coord
{
    const std::vector<std::vector<double>> EGM96LUT = {{...},{...},...};
}

#endif

当我尝试编译包含此 header 和 visual studio 的内容时,它会挂起很长时间然后崩溃。我可以在大约 10 秒内在 gcc 中构建相同的代码。

我知道如果我在 .cpp 文件中静态编译 LUT 可能会起作用,但我真的不想破坏 header-only-ness图书馆的。我也知道我可以将数据存储在某种类型的 .dat 文件中并从磁盘读取它,但我也试图避免这种情况并保持所有内容的编译。

是否有可能有助于缩短构建时间但不使用 .cpp 的解决方法?

我最初使用矢量,所以 LUT 是 heap-allocated,因为我担心可能会溢出堆栈。将向量重构为 const 数组解决了问题,并且没有溢出。

const double EGM96LUT[721][1441] = {{...},{...},...};

你总是可以打破它。一次生成一个内部向量(使用您最喜欢的脚本语言生成此长文本),然后将它们存储在外部向量中。

因为根据您的描述,是解析器崩溃了,这将解决它,因为它会减少咀嚼的时间。

改成

或许也行
const std::vector<const std::vector<double> >

因为这确实是二维数组存储的内容。