基本上我试图做的是
#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不是编译器已知的编译时常量。问题是,我确实知道它在编译时的长度,尽管这些值是未知的。问题是如果我将初始化列表扩展为可变参数模板,那将导致两个可变参数包。
我是否必须将显式数字参数传递给该函数?如何实现或近似所需的语义?
编辑:我不需要返回数组,我只需要返回一系列双精度数,最好是在堆栈上。答案 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 });
}