从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;
}
}
答案 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>();
}