Il faut l'enregistrer oui, après le fait que ça arrive dans un singleton n'est qu'un détail interne. L'enregistrement manuel permet de ne pas avoir à passer un coup de précompilateur, mais si on préfère cette dernière option on peut toujours utiliser un précompilateur qui génère le code de création de la meta-classe. Avec Qt on n'a pas ce choix.1- faut enregistrer la classe et ses meta data dans un singleton
Ou tout simplement à partir de l'objet. Tu sembles penser qu'il y a une différence fondamentale avec Qt, ce n'est pas le cas, c'est strictement la même chose. A partir du moment où tu transformes ton objet en sa représentation abstraite (QObject pour Qt, camp::Object pour CAMP) tu le trimballes sans avoir à connaître son type statique.2- à partir du nom ou du typeId tu peut accéder au metadata par un CAMP:Class
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // Avec Qt QObject* object = truc; // Avec CAMP camp::Object object = truc;Le type est récupéré en fonction de l'objet, donc c'est forcément le bon. Seul un objet qui n'aurait pas de meta-classe provoquerait une erreur (de compilation).4- il faut que l'instance encapsulée par UserObject soit du bon type pour être exploitée par CAMP:Class
C'est quoi "autre" ? Tu accèdes à tout ce que tu as enregistré pour l'objet, ni plus ni moins (y compris les infos de toutes les classes de base de l'objet).5- dans le cas d'héritage on n'accède qu'au metadata que CAMP:Class permet
d'accéder et rien d'autre.
C'est quoi un camp::Class "compatible" ? Tu accèdes au camp::Class que tu as enregistré pour la classe de l'objet, c'est tout.6-il faut un CAMP:Class compatible pour exploiter les metadata sur une instance
Je ne comprends pas toutes ces histoires de compatibilité dont tu parles. Le système te donne forcément accès à la meta-classe de l'objet que tu manipules, il n'y a aucun risque d'erreur ou d'incompatibilité.7- Que se passe t'il si le UserOject n'est pas compatible avec la camp::Class utilisé? Une exception? ceci est validé à la compile?
Ce qui est intrusif et chiant à mettre en place (MOC)1- les metadata sont défis directement dans la définition de la classe grâce au moc
Pareil.2- les metadata sont directement accessible par l'instance
Pareil, on peut complètement s'abstraire du type une fois qu'on bosse avec les classes de CAMP.3- les metada sont hérités et on as pas besoin de connaitre le type.
Ce n'est pas une limitation technique, ça c'est un choix de conception qui m'a été imposé lorsque j'ai développé la bibliothèque4- on peut ajouter des propriétés dynamiquement.
Moi je trouve au contraire que c'est exactement la même chose, d'ailleurs ça a été développé dans cet esprit.Grâce au superObject, je trouve que la version Qt bien plus simple et permet des choses que ne permet pas camp( Et camp permet des choses que ne permet pas QObject). De là à dire que la version de CAMP est plus puissante ou inversement , je dit que c'est comme avec les signal/slot, c'est pas le même objectif.
Bref oublions CAMP (même si pour moi c'est le meilleur exemple pour illustrer mon propos), je dis juste qu'aucune des fonctionnalités apportées par QObject ne nécessite un héritage, et tout particulièrement les meta-informations qui peuvent être obtenues via un service externe et non-intrusif aux objets. Et qui plus est sans précompilateur.
Partager