Domanda

Ho una classe modello definita (in parte) come

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

Se voglio chiamare DoSomething da un'altra classe, ma essere in grado di farlo per più tipi 'T' nello stesso posto, sono bloccato per un'idea poiché i puntatori di funzioni del metodo sono vincolati in modo univoco al tipo di classe. Ovviamente, ogni MyClass è di tipo diverso, quindi non posso memorizzare i puntatori di funzione su MyClassDoSomething () in un modo "polimorfico".

Il mio caso d'uso è che voglio archiviare, in una classe di attesa, un vettore di puntatori a "DoSomething" in modo tale da poter effettuare una chiamata a tutte le classi memorizzate da un unico posto.

Qualcuno ha qualche suggerimento?

È stato utile?

Soluzione

Ok, quindi la soluzione functor non funziona come ti serve. Forse dovresti avere la tua classe template ereditata da una base comune " Interface " classe. E poi usi un vettore di quelli.

Qualcosa del genere:

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>);

Altri suggerimenti

Sai, è proprio quello che dovevo fare. Bizzaramente l'avevo scartato come una soluzione valida per il mio caso iniziale, per motivi che ora mi sfuggono. Penso di essere stato accecato da alcune cose di metaprogrammazione che sto facendo nello stesso posto per l'invio in fase di compilazione (ovvero confondendo il tempo di compilazione e il tempo di esecuzione nel mio cervello addosso).

Grazie per le scosse!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top