Bonjour à tous,
J'essaye de faire un foncteur pour accéder aux propriétés de ma classe.
Voici la classe :
Voici le foncteur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 template<class T> class CData { public: void IProperty* GetProperty(const std::string& sName); }
Jusqu'ici tou va bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 template<class T> class CDataPropertyFunctor { public : typedef typename IProperty* (T::*DataPropFunc)(const std::string&); CDataPropertyFunctor(DataPropFunc pFunc) : m_pFunc(pFunc) {} IProperty* Execute(CData<T>* tData, const std::string& sName) {return tData->pFunc(sName);} private : DataPropFunc m_pFunc; }
Maintenant j'aimerai stocker une liste de ces foncteurs et ça se complique étant donné que cette liste contiendra plusieurs foncteurs agissant sur des données différentes, donc il me faut un foncteur de base pour éliminer le template.
Mais dans une méthode virtuelle, on ne peux pas spécifier de template. je ne peux donc pas faire ceci
J'ai bien une solution, le fait une interface IData, puis mon CData<T> dérive de IData, et dans mon foncteur je travaille avec l'interface.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class IDataPropertyFunctor { public: virtual template<class T> IProperty* Execute(CData<T>* tData, const std::string& sName) = 0; }
Mais bon, j'aimerai pouvoir m'en passer s'il y a une autre solution.
Merci beaucoup,
A bientôt
Partager