Bonjour à tous,

Voilà mon souci du moment :

J'ai une interface :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
class IProperty
{
public:
    virtual std::string ToString() = 0;
};
Puis qui en hérite une propriété conrête, templarisée
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 CProperty
{
typedef T value_type;
 
public:
    virtual std::string ToString();
private:
   T m_tValue;
};
Ce qui me dérange, c'est que lorsque je dois comparer deux "IProperty", je ne peux pas savoir si je peux comparer les types encapsules entre eux ou devoir passer par la conversion en chaîne de caractères...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
IProperty& lProperty = CProperty<long>(10);
IProperty& strProperty = CProperty<std::string>("10");
lProperty == strProperty; // On passe par les "ToString()", ok
 
IProperty& lProperty2 = 20;
lProperty2 == lProperty1; // On passe toujours par les ToString mais j'aimerai passer par la comparaison entre "long" pour gain de perfs
Comment je peux résoudre le problème ? Est-t-il possible de mettre une fonction virtuelle pure qui renvoi non pas une valeur, une référence ou un pointeur mais un type afin de les passer à une structure Trait qui les comparera ?


Merci beaucoup,

A bientôt