0

以下模板

template<typename Data, typename Number>
int compute(Data d, Number n) {
    if(n > 10) SLOW(d)
    if(n < 30) EXPENSIVE(d)
    if(n < -10) .. if(..)   // etc.
    return d.abc();
} 

有时使用Number n动态计算的:调用compute(data, runtime_number),有时使用编译时已知参数调用: compute(data, 3)

如果我不相信编译器会优化后一种情况(有或没有内联),但相信它足以让if(false)块消失,我将不得不复制大量代码并编写compute<12>(data)模板。除了代码重复之外,compute(data, number)使用起来更方便、更直观。

有没有办法统一这两者?

编辑:这更多是关于模板,或者如果你愿意的话,模板滥用,而不是关于编译器可以应用于这种情况的优化。

4

1 回答 1

1

绝对什么都不做。编译器足以优化一切。

于 2013-10-02T14:08:13.913 回答