作者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)