使用函数调用初始化静态全局数据(在编译时)

Eth*_*eal 4 c++ performance static

我试图通过在编译时计算数字序列并将它们存储为静态向量来节省计算时间(但我现在可能会在运行时开始计算一次)。我正在尝试做的一个简单(非编译)示例是:

#include <vector>
using namespace std;

static vector<vector<int> > STATIC_THING(4, vector<int>(4));

void Generator(int x, int y, vector<int> *output) {
  // Heavy computing goes here
  for(int i=0; i < 4; ++i)
    (*output)[i] = x * y;
  return;
}   
static void FillThings() {
  for(int x=0; x < 4; ++x)
    for(int y=0; y < 4; ++y)
      Generator(x, y, &STATIC_THING[x]);
}   
FillThings();

int main() {
}   
Run Code Online (Sandbox Code Playgroud)

除了预先计算并将我的序列硬编码到数组中之外,还有其他方法可以让编译器解决这个问题吗?我觉得应该有一种方法至少可以在这将存在的头文件的第一个 #include 上完成,但我只看到它用类完成。如果可以在编译时方便计​​算,我可以使用数组而不是向量。

编辑:

  • 尽管建议使用模板元编程,但我的实际生成器算法太复杂了,无法使用这种技术。

  • 使用查找表似乎是我唯一可以避免运行时计算的其他选择;如果性能在未来仍然是一个问题,我将回到这一点。

Dav*_*rtz 5

做这个:

static int FillThings() {
  for(int x=0; x < 4; ++x)
    for(int y=0; y < 4; ++y)
     Generator(x, y, &STATIC_THING[x]);
  return 9087;
}   
static int q = FillThings();
Run Code Online (Sandbox Code Playgroud)