作者jeunder (omega~ oh my god)
看板CSSE
標題Re: [CPP] compile time 與 run time 之間的代溝
時間Mon Jun 27 22:15:38 2005
抱歉, 這樣做沒有解答到我的提問喔.
※ 引述《reader (讀者)》之銘言:
: 只是想知道怎麼做啊... 好吧,以下:
: int table[N];
: template<int i> int f();
: template<int i> void function init_f() {
^^^^^^^^ 這個 function 是? 你擴充的東西? @,@?
: table[i-1] = f<i-1>();
: if(i) init_f<i-1>();
^^^^^^^^^^^^^^^^^^^^
這一行會把 compiler 害死.
因為要處理 init_f<N>(), init_f<N-1>(), ... (無止盡).
編譯器不知道何時該停止, 而 if(i) 這樣的敘述只有在執行時期才有影響力.
現在的編譯器都還是很笨, 像這個情況通常都要另外定義 init_f<1> 當成編譯
時期遞迴的終止條件, 像這樣
template<> void init_f<1>() {
table[0] = f<0>();
}
: }
: void main() {
: init_f<N>();
^^^^^^^^^^^^
原本的問題是希望設定 table 可以在編譯時期完成, 像這樣在執行時期呼叫函數,
並非我原本的期望. 雖然這樣也可以運作良好, 但是我原來的問題就是在很龜毛情
境下發問的, 在極端注重程式執行效率的情況下, 希望盡可能的把運算工作在編譯
時期完成.
: cin >> n;
: cout << table[n];
: }
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.219.228
※ 編輯: jeunder 來自: 61.230.219.228 (06/27 22:16)