![]() |
|||||
![]() |
21-Fév-2005 | ![]() |
|||
Uniformisation des macros pour les objets:
Pour rappel, ces macros permettent de définir une série de fonctions membres automatiquement. Par exemple, chaque objet possède une fonction statique className() qui permet de récupérer son nom (vu que l'implémentation des RTTI n'est pas identique sur toutes les plateformes).
J'ai viré GPSTATE_COMMON_H et REZONER_COMMON_H pour placer le constructeur virtuel (getClone()) au niveau de VirtualObject (objet de base). Ce constructeur par copie est utile pour un tas de classes qui définissent chacune une macro (ReZoner - Extractor - GpState - NumberedObject - License - Unknown - etc). Le problème vient des classes abstraites qui ne peuvent pas définir ce code (idem pour les classes dont la copie a été désactivée comme les éléments et les matériaux). J'ai donc créé une macro AOBJECT_COMMON_H (c'est l'ancien VOBJECT_COMMON_H) qui ne contient pas le constructeur virtuel. Par contre, la macro VOBJECT_COMMON_H la contient.
En résumé, une classe non virtuelle doit déclarer CLASSCOMMON_H. Une classe abstraite telle que MetaElement ou sans copie telle que VizWin doit déclarer AOBJECT_COMMON_H et, enfin, une classe "finale" (pouvant être instanciée et copiée) déclare VOBJECT_COMMON_H
Un petit tableau récapitulatif histoire d'avoir les idées claires:
macro | type | fonctions |
CLASSCOMMON_H | classe non virtuelle | className() [statique] |
AOBJECT_COMMON_H | classe abstraite ou sans copie (A=abstract) | id() |
getObjectName() | ||
sizeOf() | ||
VOBJECT_COMMON_H | classe virtuelle | getClone() |
Autres macros utiles:
macro | type | expl |
DISABLE_COPY | déclare les opérateurs de copies comme "privés" | MetaElement |
HASDRAWABLE | ajoute une réf vers un Drawable (visualisation) | Side |
NUMBEREDOBJECT_COMMON_H | ajoute la fonction getNumberedSetPo() pour récupérer le type de conteneur (CURVESET_ID pour Arc par exemple) | Arc |
Je pense qu'il sera aussi intéressant de fusionner NUMBEREDOBJECT_COMMON_H et VOBJECT_COMMON_H (quand ElementSet, MaterialSet, etc seront des NumberedObjectSet ...)
Fichiers ajoutés/supprimés:
R mtKernel/NumberedObject.inl
A mtElements/ContactConfigFlag.cpp
![]() |
![]() |
|||
created :17-Fév-2005 | modified : 21-Fév-2005 | |||
contact : r_boman_AT_yahoo.fr | ||||