Có, tôi có thể sử dụng std::initializer_list
. Có, thậm chí dễ dàng hơn, tôi có thể khởi tạo tổng hợp. Nhưng nó hoạt động như thế nào? Tôi dường như không thể gấp đầu của tôi xung quanh biểu thức gấp nếp của C++ 17. Không có đủ ví dụ ngoài kia.Vấn đề cú pháp khi điền một mảng có biểu thức gấp
Đây là những gì tôi đã đưa ra:
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);
}
EDIT: Biên soạn với mới nhất Clang. Biểu thức gấp được hỗ trợ.
Sống dụ:http://coliru.stacked-crooked.com/a/777dc32da6c54892
Không nên ít nhất là '(arr [i ++] = pack ...)'? –
@VaughnCato Expression chứa gói thông số chưa được mở rộng 'gói' - vì vậy Clang phàn nàn. – DeiDei
Như Vaughn đã nói: "lỗi: mở rộng gói không chứa bất kỳ gói tham số chưa được mở rộng" – Deduplicator