j'ai une classe de base abstraiteméthodes abstraites statiques dans C++
class IThingy
{
virtual void method1() = 0;
virtual void method2() = 0;
};
Je veux dire - « toutes les classes fournissant une instanciation de béton doivent fournir ces méthodes statiques trop »
Je suis tenté de faire
class IThingy
{
virtual void method1() = 0;
virtual void method2() = 0;
static virtual IThingy Factory() = 0;
};
Je sais que ne compile pas, et de toute façon il n'est pas clair comment l'utiliser même s'il compile. Et de toute façon je peux juste faire
Concrete::Factory(); // concrete is implementation of ITHingy
sans mentionner Factory dans la classe de base du tout. Mais je pense qu'il devrait y avoir un moyen d'exprimer le contrat auquel je veux que les implémentations s'inscrivent.
Existe-t-il un idiome bien connu pour cela? Ou est-ce que je viens de le mettre dans les commentaires? Peut-être que je ne devrais pas essayer de le forcer de toute façon
Editer: Je me sentais vague en tapant la question. Je pensais qu'il devrait y avoir un moyen de l'exprimer. Igor donne une réponse élégante mais en fait cela montre que ça n'aide vraiment pas. Je finis toujours par avoir à faire
IThingy *p;
if(..)
p = new Cl1();
else if(..)
p = new Cl2();
else if(..)
p = new Cl3();
etc.
Je suppose que des langues de réflexion comme C#, python ou java pourrait offrir une meilleure solution
Je ne suis pas tout à fait sûr de ce que vous voulez. Êtes-vous à la recherche d'une méthode 'clone'? – GManNickG
Je suppose que je ne vois pas vraiment une situation réelle où vous auriez besoin de quelque chose comme ça? Le polymorphisme n'a vraiment de sens qu'avec les instances réelles. Les méthodes statiques sont simplement des fonctions régulières qui utilisent le nom de classe pour MRO. Cela n'a pas vraiment de sens, à un moment donné, vous devez connaître le nom de la méthode class :: car C++ est lié statiquement. – rossipedia
Il semble qu'il veut spécifier que les sous-classes ont une méthode Factory statique. Et Bryan, vous devriez le déplacer vers l'espace de réponse. – jdmichal