是的,我可以使用std::initializer_list
.是的,更简单,我可以进行聚合初始化.但这是如何工作的?我似乎无法克服C++ 17的折叠表达式.那里没有足够的例子.
这是我想出的:
templatestruct foo { T arr[N]; template constexpr foo(Args&&... pack) { static_assert(sizeof...(pack) <= N, "Too many args"); std::size_t i = 0; (arr[i++] = ...); } }; int main() { foo a(1, 2, 3, 4, 5); }
编辑:与最新的Clang编译.支持折叠表达式.
实例: http ://coliru.stacked-crooked.com/a/777dc32da6c54892
您需要使用逗号运算符进行折叠,这也解决了排序问题.
(void(arr[i++] = pack) , ...);