Salut,
J'ai codé un certain nombre de foncteurs pour me faciliter la manipulation des conteneurs de mon appli.
Je suis sur que ça existe déjà, mais je souhaite en refaire, ne serait-ce que pour apprendre et m'amuser.
J'ai donc commençé par des choses comme :
qui me permet de supprimer les pointeurs nulls dans un conteneur de pointeurs, avec un remove_if :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class IsNull { public : template <typename BaseType> bool operator() (const BaseType* pT) {return pT == NULL;}; };
J'ai codé un foncteur Not, quelques foncteurs d'opérateurs ... et puis je me suis dit que tout ceci était peut-être un peu répétif, et que je devais pouvoir appeler n'importe quelle méthode des objets contenus dans mon conteneur, j'ai donc essayé de faire quelque chose comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::remove_if(a.begin(),a.end(),IsNull());
L'idée était de s'en servir comme ça : par exemple pour compter le nombre d'objets bleus de mon conteneur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 template <typename TFunctionType, TFunctionType funcRef> class ThisFunctionReturnsTrue { public : template <typename BaseType> bool operator() (const BaseType* pT) {return (pT->(*funcRef));}; };
avec bien sur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::count_if(a.begin(),a.end(),ThisFunctionReturnsTrue<void (A::*)(), A::isBlue);
Mais voilà, quand j'écris :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class A { ... public : bool isBlue(); }
mon second paramètre est un pointeur (de fonction), et donc mon compilo me jette en me disant qu'il ne sait pas l'évaluer à la compilation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ThisFunctionReturnsTrue<void (A::*)(), A::isBlue)
Y a-t-il un moyen de faire cela ?
Merci d'avoir lu jusqu'ici
Merci à ceux qui répondront
Partager