Questo è un problema interessante a cui sto pensando un po 'di tempo fa. Dato un struct
con un aggregato sottostante:Inizializzazione di aggregati universali con modelli variadici
#include <array>
template <typename T, size_t N>
struct A
{
constexpr A() = default;
template <typename ... Ts>
constexpr A(const T& value, const Ts& ... values); // magic
std::array<T, N> arr; // aggregate
};
Come si implementa variadic modello costruttore A(const T& value, const Ts& ... values)
al
- accettare entrambi i valori di tipo
T
e un altroA<T, N>
- inizializzare correttamente l'aggregato sottostante in base ai valori rappresentati dagli argomenti passati
- rispettare la capacità degli aggregati
- supporto C++ 14 regole constexpr e non introdurre alcun overhead runtime
soddisfano i requisiti di cui sopra, è possibile eseguire le seguenti operazioni:
int main()
{
A<int, 3> x(1, 2, 3);
A<int, 2> y(1, 2);
A<int, 6> a(x, 1, 2, 3);
A<int, 6> b(1, x, 2, 3);
A<int, 6> c(1, 2, x, 3);
A<int, 6> d(1, 2, 3, x);
A<int, 6> e(x, x);
A<int, 6> f(y, y, y);
return 0;
}
Qual è il valore atteso di 'y [2]' in 'A y (1,2);'? –
E il sovraccarico di runtime del richiamo del costruttore? –
@VaughnCato grazie per la cattura, quello era un errore, aggiornato ora – plasmacel