2012-10-15 19 views
5

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?

+3

Sei alla ricerca di 'std :: tuple'? – pmr

+0

@ pmr Grazie. std :: tuple fa un lavoro meraviglioso. C++ x11 è incredibile !!! – Olumide

risposta

4

Devi fare quello che dice: Espandi le variabili che provengono dai pacchetti di parametri (parametri variadici) con ....

Cioè, invece di

Foo<Types ...>(others) 

scrittura

Foo<Types ...>(others...) 
+0

Grazie. Come suggerisci che lo faccio. Questa è la mia prima incursione nei modelli variadici. – Olumide

+0

Grazie! Ha funzionato!!! – Olumide

+0

@Olumide: [demo online] (http://liveworkspace.org/code/7a9e302e6ec73e49837878b28f65d4dc) – ildjarn

Problemi correlati