我試圖通過在編譯時計算數字序列並將它們存儲爲靜態向量來節省計算時間(但我可能會在運行時的開始處爲計算解決一次現在)。什麼我試圖做一個簡單的(未編譯)的例子是:使用函數調用初始化靜態全局數據(在編譯時)
#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() {
}
有沒有辦法比預先計算和我的硬編碼序列插入陣列,讓編譯器做這個升降其他?我覺得應該有一種方法,至少可以在第一個包含頭文件的頭文件中完成這個工作,但我只能在類中看到它。如果它能在編譯時促進計算,我可以使用數組而不是向量。
EDITS:
雖然模板元編程建議,我的實際發電機算法過於複雜,借給自己這一技術。
使用查找表似乎是我唯一的其他選項,可以讓我避免運行時計算;如果性能仍然是未來的問題,我會回頭看看。
爲什麼不只是使用構造函數?而不是'STATIC_THINK',使用一個保存向量的對象。如果需要,您可以將其設置爲單例。 –
我已經在傳遞過程中完成了這個工作,在構造函數中使用數據成員和初始化器創建一個靜態實例。我可以走這條路,但我更有興趣弄清楚爲什麼我不能像上面那樣完成這個任務,如果沒有其他的理由而不是學習新的東西。 – Ethereal