J'ai le code comme ci-dessous. J'ai une classe de modèle abstrait Foo et deux sous-classes (Foo1 et Foo2) qui dérivent des instanciations du modèle. Je souhaite utiliser des pointeurs dans mon programme pouvant pointer vers des objets de type Foo1 ou Foo2, d'où j'ai créé une interface IFoo.Création d'une interface pour un modèle de classe abstraite en C++
Mon problème est que je ne suis pas sûr de savoir comment inclure la fonctionB dans l'interface, car elle dépend de l'instanciation du modèle. Est-il même possible de rendre la fonction B accessible via l'interface, ou est-ce que je tente l'impossible?
Merci beaucoup pour votre aide.
class IFoo {
public:
virtual functionA()=0;
};
template<class T>
class Foo : public IFoo{
public:
functionA(){ do something; };
functionB(T arg){ do something; };
};
class Foo1 : public Foo<int>{
...
};
class Foo2 : public Foo<double>{
...
};
Mais techniquement, je ne créerons pas une instance de IFoo, Je souhaite seulement créer une instance de Foo1 (ou 2) (pointé par un pointeur IFoo) et j'ai supposé que la fonction appropriée pourrait être trouvée par la limite dynamique? – bishboshbash
@bishboshbash: Pour qu'une fonction soit trouvée par liaison dynamique, tous les types d'arguments doivent être connus; sinon, il serait difficile de savoir ce qu'il faut rechercher si vous avez utilisé des fonctions surchargées. – liori
Je pense que je comprends. Si je créais l'instance de Foo1 et appelait Foo1.functionB (..) cela fonctionnerait bien, puisque le template a été instancié. Puis-je créer une classe abstraite pour pointer vers des objets de type Foo1 ou Foo2 via l'héritage multiple et éviter ainsi le problème de la liaison dynamique tentant de passer à travers un modèle non instancié? – bishboshbash