交换func< 7>(42)和func(42,7)模板参数语法

时间:2013-10-02 13:28:29

标签: c++ templates

以下模板

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)使用起来更好,更直观。

有没有办法统一这两个?

编辑:如果您愿意,这更多是关于模板或模板滥用,而不是编译器可以应用于此案例的优化。

1 个答案:

答案 0 :(得分:1)

绝对没有。编译器足以优化所有内容。