Sì, posso usare std::initializer_list
. Sì, ancora più facile, posso fare l'inizializzazione di aggregazione. Ma come funziona? Non riesco a piegarmi sulle espressioni di piega di C++ 17. Non ci sono abbastanza esempi là fuori.Problema di sintassi quando si popola una matrice con un'espressione di piegatura
Ecco cosa mi è venuta:
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: Compilare con ultima Clang. Le espressioni di piegatura sono supportate.
esempio dal vivo:http://coliru.stacked-crooked.com/a/777dc32da6c54892
Non dovrebbe essere almeno '(arr [i ++] = pack ...)'? –
@VaughnCato Expression contiene il pacchetto di parametri non espanso 'pack', quindi Clang si lamenta. – DeiDei
Come ha detto Vaughn: "errore: l'espansione del pacchetto non contiene alcun pacchetto di parametri non espansi" – Deduplicator