templates et polymorphisme
Bonjour à tous,
Voilà mon souci du moment :
J'ai une interface :
Code:
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:
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:
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