模板,从编译时初始化列表中分支数组的长度

时间:2017-06-24 03:55:50

标签: c++ templates

基本上我试图做的是

#include <array>
#include <initializer_list>

template <class... Fs>
auto F(const std::initializer_list<double>& vars, const Fs&... exprs) {
    return std::array<double, vars.size()>{};
}

这当然不能编译,因为vars不是编译器已知的编译时常量。问题是,我确实知道它在编译时的长度,尽管这些值是未知的。问题是如果我将初始化列表扩展为可变参数模板,那将导致两个可变参数包。

是否必须将显式数字参数传递给该函数?如何实现或近似所需的语义?

编辑:我不需要返回数组,我只需要返回一系列双精度数,最好是在堆栈上。

1 个答案:

答案 0 :(得分:1)

如果您在编译时知道大小,为什么不使用长度为模板参数的固定大小的数组?

#include <array>

template < size_t N, class... Fs >
auto F(const double (&vars)[N], const Fs&... exprs) {
  return std::array<double, N>{};
}

int main()
{
  auto a = F({ 1, 2, 3, 4 });
}