Foncteurs pour algorithmes de stl
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:
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:
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:
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:
std::count_if(a.begin(),a.end(),ThisFunctionReturnsTrue<void (A::*)(), A::isBlue);
avec bien sur :
Code:
1 2 3 4 5 6 7
|
class A
{
...
public :
bool isBlue();
} |
Mais voilà, quand j'écris :
Code:
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