Bonjour à tous,

Je bloque sur un problème dont je ne suis pas sûr qu'une solution existe.
Voilà, nous avons des classes générée automatiquement avec des conteneurs et des itérateurs spécifiques. Afin de parcourir tous les éléments, nous avons créé une macro qui prend en paramètre le nom de la classe, le nom du conteneur et qui va appeler un visiteur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
#define ITERATE_OVER_COLLECTION(_className, _collectionName, _featureName, _value) \
    { \
        _className::_collectionName##_iterator it = _value->_collectionName().begin(), ite = _value->_collectionName().end(); \
        for(;it!=ite;++it) \
        { \
            it->_featureName()->acceptVisitor(this); \
        } \
    }
J'aimerais maintenant pouvoir modifier le code acceptVisitor() par d'autres méthodes. Par exemple pour supprimer un élément de la collection.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
...
if (_value == (&(it->_FeatureName.get())) )\
{\
_value->_featureName().erase(it);\
it->_featureName()->acceptVisitor(this); \

}\
Est-il possible de paramétrer une macro pour faire cela ? A moins que notre approche soit complètement bancale et qu'il existe des techniques appropriée en c++ ?

++,
Nicolas.