Evet, std::initializer_list
kullanıyorum. Evet, daha da kolay, toplu başlatma yapabilirim. Ama bu nasıl çalışıyor? Kafamı C + + 17'nin kıvrım ifadeleri etrafında katlayamıyorum. Orada yeterli örnek yok.Bir kat ifade ile bir dizi doldururken sözdizimi sorunu
Burada ile geldi ne:
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);
}
DÜZENLEME
: son Clang ile derleniyor. Katlama ifadeleri desteklenir.Canlı örnek: Ayrıca sıralama sorunu çözer virgül operatörü ile kat gereken http://coliru.stacked-crooked.com/a/777dc32da6c54892
En azından bu olmamalı mıydı (arr [i ++] = pack ...) '? –
@VaughnCato Expression, paketlenmemiş parametre paketi 'pack' içeriyor - bu yüzden Clang şikayet ediyor. – DeiDei
Vaughn'un dediği gibi: "hata: paket genişletme, herhangi bir genişletilmemiş parametre paketi içermiyor" – Deduplicator