Je souhaite créer un modèle de classe abstraite, obligeant toutes les instances à implémenter une fonction doStuff à l'aide d'une fonction virtuelle pure.
J'ai le modèle suivant :
template<class T>
class X
{
public:
X() {};
virtual ~X() {};
virtual X<T>& doStuff(X<T>& x) = 0;
};
Et une instance avec T= int :
class Y : public X<int>
{
public:
Y();
virtual ~Y();
Y& doStuff(Y& x) {
Y res;
Y& res2 = res;
return res2;
}
};
J'obtiens le message d'erreur suivant :
Dans la fonction membre "Y& Y: : ne peut pas déclarer que la variable 'res' est de type abstrait 'Y' car les fonctions virtuelles suivantes sont pures dans 'Y' : X& X::doStuff(X&) [avec T = int]
Si je change le type de l'argument en doStuff dans Y, tout se passe bien :
class Y : public X<int>
{
public:
Y();
virtual ~Y();
Y& doStuff(X<int>& x) {
Y res;
Y& res2 = res;
return res2;
}
};
Pourquoi le paramètre ne peut-il pas être une référence à un objet Y lorsque Y implémente X ?
La valeur de retour de Y& ne génère pas de message d'erreur similaire.
Peut-être que je n'utilise pas la bonne approche pour atteindre ce que je veux - n'hésitez pas à me le faire savoir.