以下模板
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)
使用起来更方便、更直观。
有没有办法统一这两者?
编辑:这更多是关于模板,或者如果你愿意的话,模板滥用,而不是关于编译器可以应用于这种情况的优化。