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