以下模板
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)
块消失,我将不得不复制大量代码并编写一个{ {1}}模板。除了代码重复之外,compute<12>(data)
使用起来更好,更直观。
有没有办法统一这两个?
编辑:如果您愿意,这更多是关于模板或模板滥用,而不是编译器可以应用于此案例的优化。
答案 0 :(得分:1)
绝对没有。编译器足以优化所有内容。