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

Template, branching on length for array from compile-time initializer list

本文关键字:分支 数组 列表 编译 初始化 模板      更新时间:2023-10-16

基本上我尝试做的是

#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()>{};
}

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

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

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

如果您知道编译时的大小,为什么不将固定尺寸数组与长度为模板参数?

#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 });
}