Bonjour,
Dans une classe j'ai cree une methode template. Le parametre template est un bouléen "isConst".
Le comportement du code est correct, mais j'aimerai que la méthode soit const dans un cas et non const dans l'autre, au sens ou elle ne change pas les données membres de la classe.
Evidemment, je pourrais dupliquer le code pour faire un cas const et un autre cas non const, mais je me demandais si il y avait une façon plus élégante de faire ça.
exemple (les variables commençant par un underscore sont des données membre de la classe) :
La méthode que je veux const ou non const
Avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template <bool isConst> inline void inCircleListFromNULL( std::vector<simplex<scalar_type> *> & toDelete,\ std::vector<pathToFace<scalar_type> > & visibleFaces,\ scalar_type * const & point) { //....DU CODE typedef typename std::list<pathToFace<scalar_type> > LPTF; IncrementOrErase<LPTF,isConst>::apply(_externFaces,il); //... DU CODE }
Merci d'avance,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 //La fonction IncrementOrErase FAIT ++il ou il=container.erase(il) //selon si isConst est true ou false template <class container_type, bool isConst> struct IncrementOrErase; template <class container_type> struct IncrementOrErase<container_type,false> { static inline void apply(container_type & cont, typename container_type::iterator & il) { il = cont.erase(il); } }; template <class container_type> struct IncrementOrErase<container_type,true> { static inline void apply(const container_type & cont, typename container_type::const_iterator & il) { ++il; } };
S.
Partager