Puntatore alle funzioni dei membri della classe modello
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?
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!