2010-04-07 9 views
6

E 'possibile in C++ determinare il numero di variabili/campi nella classe generica? per esempioMeta-programmazione template C++, numero di variabili membro?

// suppose I need metaclass number_members determines number of members 

struct example { int i, j; }; 
assert(number_members<example>::value==2); 

ho guardato attraverso MPL, ma non riusciva a trovare attuazione.

grazie.

+0

Perché vuoi sapere quanti senza sapere cosa sono? – Potatoswatter

+0

So come lavorare con i tipi, non ho familiarità con altri aspetti e funzionalità della meta-programmazione modello come questa – Anycorn

risposta

7

No. Il C++ non fornisce un'introspezione generale nelle strutture.

È possibile provare un C ++0x std::tuple, che ha alcune delle caratteristiche di un POD struct generale. Oppure prova a eseguire il rollover dalla libreria Boost MPL. Sarebbe un po 'avanzato se si è appena iniziato con C++.

+1

Guarda anche Boost.Fusion mentre ci sei. È un buon modo per mescolare modelli e codice di runtime. Personalmente uso 'boost :: fusion :: map' come scheletro per' struct'/'class' quando avevo bisogno di simili-reflection. –

1

No. Sfortunatamente, il C++ non ha quel tipo di introspezione incorporato. Tuttavia, con qualche preelaborazione aggiuntiva come, Meta Object Compiler (moc), è possibile ottenere qualcosa di simile ... la classe QMetaObject fornisce un propertyCount(); tuttavia, la classe dovrebbe ereditare da QObject, utilizzare la macro Q_OBJECT e registrare le proprietà per tutto ciò che funziona ... quindi, in breve, non è automatico.

1

Non è possibile farlo direttamente. La domanda ovvia, quindi, è ciò che stai cercando di realizzare - è probabile che tu possa fare ciò che ti serve, ma il modo per farlo potrebbe essere piuttosto diverso.

+1

in realtà, non provando davvero a fare qualcosa di specifico. Ho solo pensato a come avrei potuto farlo e ho capito che non so come, ho deciso di fare una domanda. sto solo cercando di imparare aspetti aggiuntivi. – Anycorn

Problemi correlati