如果constexpr等效于switch

时间:2019-11-29 11:14:17

标签: switch-statement c++17 if-constexpr

从C ++ 17开始,模板函数可以在编译时求值的表达式的函数返回一种或另一种类型:

template <size_t N>
constexpr auto f()
{
    if constexpr (N == 1)
        return 1.0; // return an double
    else if constexpr (N == 2)
        return std::array<double,N>(); // return an array of doubles
    else
        return -1; // return an int
}

有什么等效的开关吗?

我尝试失败:

template <size_t N>
constexpr auto f()
{
    switch (N) // also switch constexpr (N) -> syntax error
    {
        case 1: return 1.0;
        case 2: return std::array<double,N>();
        default: return -1;
    }
}

1 个答案:

答案 0 :(得分:0)

您可以专门设置功能模板:

template <size_t N>
constexpr auto f()
{
    // default case
    return -1;
}
template<> 
constexpr auto f<1>()
{
    return 1.2;
}
template<>
constexpr auto f<2>()
{
    return std::array<double,25>();
}

https://godbolt.org/z/dF_BSW