Question

J'ai une classe basée sur un modèle définie (en partie) comme

template <class T> MyClass
{
public:
   void DoSomething(){}
};

Si je veux appeler DoSomething depuis une autre classe, mais pouvoir le faire pour plusieurs types 'T' au même endroit, je suis bloqué pour une idée, car les fonctions de méthode pointeurs sont uniquement contraints au type de classe. Bien entendu, chaque MyClass est d'un type différent, je ne peux donc pas stocker les pointeurs de fonction vers MyClassDoSomething () de manière "polymorphe".

Mon cas d'utilisation est que je souhaite stocker, dans une classe de portefeuille, un vecteur de pointeurs de fonction vers 'DoSomething' afin que je puisse émettre un appel à toutes les classes stockées à partir d'un seul emplacement.

Quelqu'un a-t-il des suggestions?

Était-ce utile?

La solution

Bien, la solution de foncteur ne fonctionne pas comme vous le souhaitez. Votre classe de modèle devrait peut-être hériter d'une base commune "Interface". classe. Et puis vous utilisez un vecteur de ceux-ci.

Quelque chose comme ça:

class Base { 
public:
  virtual ~Base(){}
  virtual void DoSomething() = 0;
}

template <class T> class MyClass : public Base {
public:
    void DoSomething(){}
};

std::vector<Base *> objects;
objects.push_back(new MyClass<int>);
objects.push_back(new MyClass<char>);

Autres conseils

Vous savez, c’est exactement ce que je devais faire. Bizzarly, je l'avais escompté comme solution valable pour mon cas d'utilisation, pour des raisons qui m'échappent maintenant. Je pense avoir été aveuglé par une métaprogrammation que je fais au même endroit pour l’envoi au moment de la compilation (c’est-à-dire confus entre le temps de compilation et le temps d’exécution dans mon cerveau agité).

Merci pour les soubresauts!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top