作者reader (讀者)
看板CSSE
標題Re: [CPP] compile time 與 run time 之間的代溝
時間Mon Jun 27 22:57:13 2005
※ 引述《jeunder (omega~ oh my god)》之銘言:
: 抱歉, 這樣做沒有解答到我的提問喔.
: ※ 引述《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>();
: }
嗯,是需要用 init_f<1>, 這錯已經犯過幾次,還是沒注意。
: : }
: : void main() {
: : init_f<N>();
: ^^^^^^^^^^^^
: 原本的問題是希望設定 table 可以在編譯時期完成, 像這樣在執行時期呼叫函數,
: 並非我原本的期望. 雖然這樣也可以運作良好, 但是我原來的問題就是在很龜毛情
: 境下發問的, 在極端注重程式執行效率的情況下, 希望盡可能的把運算工作在編譯
: 時期完成.
但運算是在編譯時期完成的。
只有陣列設定是在執行時期完成,因為要在編譯時期設定陣列
內容,基本上是沒有辦法的。
用 template 的遞迴也做不到的,應該就是做不到了。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.222.173.29