C++ ne possède pas de système d'introspection en natif. Des librairies comme CAMP ou Boost::mirror permettent de s'en sortir. On ne coupe pas à une dégradation des performances, donc autant aller chercher ailleurs. Cette note sera surtout l'occasion de creuser la programmation OO et l'introspection VS génération de code.

 

Niveau Nom
0 Instances
1 Classes
2 Templates, méta classes
3 Il faudrait être fou pour avoir un niveau 3

Une classe permet de fabriquer des objets, c'est certain. Le reste dépend du langage. En C++, on ne peut pas faciliter facilement les classes. Par opposition à Java, qui permet de lire les informations sur la structure de la classe. Mais pas de les écrire. Envisageons cette possibilité un instant. Juste comme çà, pour voir...

Créer des classes à la volée

Fermez les yeux et imaginez le rêve:

MetaClass c("className");
Type t = TypeFactory.get("string");
c.add("attribute",type);
Class classe = c.newInstance();
Object o = classe.newInstance();

Vous pouvez dire que je suis un rêveur, mais je ne suis pas le seul. Comme l'a dit un certain Lennon. Quel serait l'intérêt?

  • De pouvoir éviter la génération de code en Jaxb par exemple.
  • De pouvoir déclarer une classe de faits dans les moteurs de règles par exemple

Mais quand le langage ne l'offre pas?

Comme çà n'est pas possible, Drools utilise un méta niveau (fact type), et jaxb prône la génération de code. En C++, la situation est encore pire, du fait de deux limitations: d'abord, pas de super classe commune, comme object. Cà faciliterait bien la vie. Ensuite, pas d'introspection. Donc, pourquoi ne pas penser à la génération de code en C++?

On testera, on vous dira!

L'équipe R&D

 

Comments are closed.

Set your Twitter account name in your settings to use the TwitterBar Section.