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 :
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;};
};
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
std::remove_if(a.begin(),a.end(),IsNull());
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
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));};
};
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
std::count_if(a.begin(),a.end(),ThisFunctionReturnsTrue<void (A::*)(), A::isBlue);
avec bien sur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
class A
{
...
public :
   bool isBlue();
}
Mais voilà, quand j'écris :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ThisFunctionReturnsTrue<void (A::*)(), A::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.

Y a-t-il un moyen de faire cela ?

Merci d'avoir lu jusqu'ici
Merci à ceux qui répondront