Il est possible de créer des méta-classes, mais C++ n'est pas à ce sujet, il s'agit d'implémentations statiquement basées sur la compilation, pas de flexibilité d'exécution. Cela dépend si vous voulez des Meta-Classes avec des méthodes ou juste des Meta-Classes avec des données, les classes Data peuvent être implémentées avec des constructions Boost comme boost :: any, et si vous voulez des Classes avec des méthodes, vous pouvez utiliser boost :: bind pour lier des méthodes à l'objet, ou vous pouvez les implémenter vous-même avec une interface de point d'entrée unique comme les objets COM.
Cependant, le "vrai" C++ consiste à utiliser des génériques afin que tout puisse être déterminé au moment de la compilation, pour de meilleures performances. Pour être honnête, j'ai vu très peu de systèmes, bien que j'en ai vus, qui nécessitent vraiment une flexibilité d'exécution, dans la plupart des cas les objets naissent et meurent de la même classe, ou au moins assez pour dépenser 95% vie comme une seule classe une fois qu'ils sortent de leur usine.
Ainsi, dans de nombreuses situations, on paie trop pour les méta-classes d'exécution. Bien sûr, il ya l'école de pensée que cela fournit de meilleures performances de développement, mais dans de nombreuses situations, chaque ligne de code sera exécutée sur le matériel quelques centaines de millions de fois plus que le temps qu'il a fallu pour l'écrire. Vous pouvez donc penser que les classes de compilation et d'exécution sont payantes ou locatives pour toujours. Personnellement, j'aime payer à l'avance.