Bonjour à tous
,
Je pense que ce problème a déjà été soulevé quelque part sur ce forum mais je n'ai pas le temps de chercher trop longtemps. En fait, pour faire simple, je dispose d'une classe templatée et abstraite :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
template <typename T, typename U>
class Curve
{
public:
[...]
bool isntValueInInterval(const U &value) const
{
if((U)value>=m_xMin&&(U)value<=m_xMax)
return false;
return true;
}
protected:
U m_xMin, m_xMax;
[...]
}; |
La fonction isntValueInInterval permet simplement de savoir si une valeur en X est comprise dans l'intervalle de définition de la fonction [xMin;xMax] de la classe.
Dans une autre classe, héritant de la classe Curve, une instruction permet de placer les solutions d'équations diverses (rendues compte par différentes classe dérivant de la classe Curve) dans une liste.
Ces solutions peuvent être non comprises dans l'intervalle de la Curve actuelle et je ne veux pas que cela se produise, c'est pourquoi je voudrais utiliser la méthode remove_if(...) sur la liste contenant les solutions, avec le prédicat isntValueInInterval de la classe Curve.
D'où cette ligne de code :
results.remove_if(Curve<T,U>::isntValueInInterval);
Cependant, même si j'ai essayé de nombreux autres arguments à la place de
Curve<T,U>::isntValueInInterval
(pointeurs ...), cela ne fonctionne pas : le compilateur me renvoie :
"no matching function for call to [...]::remove_if(<unknow type>)"
J'ai pensé remplacer la fonction "isntValueInInterval(const U &value)" par "isntValueInInterval(const U &value, U min, Umax)" afin de ne pas "dépendre" des attributs de la classe Curve et éventuellement placer cette fonction en statique, mais il y a trop d'arguments et bind3rd n'existe pas dans la STL (ou alors je suis aveugle ^^).
Dois-je continuer sur cette piste (créer 2 fonctions à la place d'une seule : une fonction isBeforeMin et une fonction isAfterMax afin de n'avoir que 2 arguments et donc de pouvoir utiliser bind2nd 2 fois par la suite) ou partir sur autre chose ? Eventuellement une autre classe ?
Merci par avance pour votre aide
Partager