sto sperimentando con i modelli variadic e vorrei sapere se possono essere utilizzati al fine di generalze come(?) I modelli di classe initialzing e di accesso a membri di un modello di classe variadic
template<typename T1, typename T2 , typename T4, typename T4>
struct Foo
{
T1 &m_member1;
T2 &m_member2;
T3 &m_member3;
T4 &m_member4;
};
Inoltre, ho 'Mi piacerebbe essere in grado di inizializzare tutti i membri incatenando i costruttori. Questo è quanto ho ottenuto:
template<typename... Types>
struct Foo;
template<typename T , typename... Types>
struct Foo<T, Types ...> : public Foo<Types ...>
{
Foo(T member , Types ... others) : m_member(member) , Foo<Types ...>(others)
{
}
T m_member;
};
template<typename T>
struct Foo<T>
{
Foo(T member) : m_member(member)
{
}
T m_member;
};
dove l'obiettivo è quello di creare oggetti in questo modo:
Foo<char,int,bool,float> f('a' , 42 , true , 1.234);
Il codice non riesce a compilare (GCC 4.5.3) con l'errore:
TestVariadicTemplates.cpp: In constructor ‘Foo<T, Types ...>::Foo(T, Types ...)’:
TestVariadicTemplates.cpp:15:83: error: parameter packs not expanded with ‘...’:
TestVariadicTemplates.cpp:15:83: note: ‘others’
TestVariadicTemplates.cpp:15: confused by earlier errors, bailing out
Modifica
Quale sarebbe il modo migliore per ri ference i vari membri di Foo
?
Sei alla ricerca di 'std :: tuple'? – pmr
@ pmr Grazie. std :: tuple fa un lavoro meraviglioso. C++ x11 è incredibile !!! – Olumide