2010-04-07 5 views
6

Est-il possible en C++ de déterminer le nombre de variables/champs dans la classe générique? par exempleMéta-programmation de modèle C++, nombre de variables membres?

// suppose I need metaclass number_members determines number of members 

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

J'ai regardé par mpl mais n'a pas pu trouver la mise en œuvre.

merci.

+0

Pourquoi voulez-vous savoir combien sans savoir ce qu'ils sont? – Potatoswatter

+0

Je sais comment travailler avec des types, je ne suis pas familier avec d'autres aspects et caractéristiques de méta-programmation de modèle tels que ceci – Anycorn

Répondre

7

Non. C++ ne permet pas l'introspection générale dans les structures.

Vous pouvez essayer un C ++0x std::tuple, qui possède certaines des caractéristiques d'un POD général struct. Ou, essayez de rouler le vôtre à partir de la bibliothèque Boost MPL. Ce serait un peu avancé si vous débutez avec C++.

+1

Regardez également Boost.Fusion pendant que vous y êtes. C'est un bon moyen de mélanger les modèles et le code d'exécution. J'ai personnellement utilisé 'boost :: fusion :: map' comme squelette pour' struct'/'class' quand j'ai eu besoin d'une simili-réflexion. –

1

Non. Malheureusement, C++ n'a pas ce type d'introspection intégré. Cependant, avec certains prétraitements supplémentaires tels que Meta Object Compiler (moc), vous pouvez obtenir quelque chose de similaire ... la classe QMetaObject fournit un propertyCount(); cependant, votre classe devra hériter de QObject, utiliser la macro Q_OBJECT et enregistrer les propriétés pour que tout fonctionne ... donc, en bref, ce n'est pas automatique.

1

Vous ne pouvez pas faire cela directement. La question évidente est alors ce que vous essayez d'accomplir - les chances sont que vous pouvez faire ce dont vous avez besoin, mais la façon de le faire peut être assez différente.

+1

en fait, pas vraiment essayer de faire quelque chose de spécifique. Juste pensé comment je pouvais le faire et réalisant que je ne sais pas comment, a décidé de poser une question. juste essayer d'apprendre des aspects supplémentaires. – Anycorn

Questions connexes