c++ - 使用折叠表达式填充数组时的语法问题

标签 c++ c++17 fold-expression

是的,我可以使用 std::initializer_list。是的,更简单的是,我可以进行聚合初始化。但这是如何工作的?我似乎无法绕过 C++17 的折叠表达式。没有足够的例子。

这是我想出的:

template<class T, std::size_t N>
struct foo
{
    T arr[N];

    template<typename... Args>
    constexpr foo(Args&&... pack)
    {
        static_assert(sizeof...(pack) <= N, "Too many args");
        std::size_t i = 0;
        (arr[i++] = ...);
    }
};

int main()
{
    foo<int, 5> a(1, 2, 3, 4, 5);
}

编辑:用最新的 Clang 编译。支持折叠表达式。

实例: http://coliru.stacked-crooked.com/a/777dc32da6c54892

最佳答案

你需要用逗号操作符折叠,这也解决了排序问题。

(void(arr[i++] = pack) , ...);

关于c++ - 使用折叠表达式填充数组时的语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569455/

相关文章:

c++ - 使用arm-musl交叉编译,ERROR> proc_open : hidden symbol `__init_array_end' in proc_open is referenced > by DSO

c++ - <regex> std::regex 相当于 Qt 的 QRegularExpression::isValid() 且不会触发异常

c++ - 从一个值和一个大小创建递归函数参数列表

c++ - 如果使用 g++,为什么 std::cout 可以转换为 void*?

c++ - AS3 中的计数器 "without dynamic text field"

c++ - 模板类的模板嵌套类作为完全专用函数的参数

c++ - 如何获取函数整数的模板参数包?

c++ - 折叠表达式的操作数是否需要加括号?

c++ - 评估参数包

c++ - 构造函数如何在私有(private)继承中工作