看板 CSSE 關於我們 聯絡資訊
抱歉, 這樣做沒有解答到我的提問喔. ※ 引述《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)