C++:constexpr if

/ C++ / 没有评论 / 1742浏览

1.constexpr

作用:支持在编译器执行,用于泛型编程中的条件判断
之前做的做法:
// 只有一个模板参数时调用此模板
template<int N>
int sum()
{
    return N;
}

// 模板参数 > 2 个时调用此模板
template <int N, int N2, int... Ns>
int sum()
{
    return N + sum<N2, Ns...>();
}

// 调用
sum<1, 2, 3>(); // returns 6

--------------------------------

//将多个数累加并返回累加结果
template <int N, int... Ns>
auto sum()
{
    if constexpr (0 == sizeof...(Ns))
        return N;
    else
        return N + sum<Ns...>();
}

// 调用
sum<1, 2, 3>(); // returns 6

------------------------------------

更方便的做法是利用fold表达式:
template<typename ...Ns>
auto sum(Ns... ns) {
    return (ns + ...);
}
sum(1, 2, 3); // returns 6