Metodi virtuali di classi template

di il
2 risposte

Metodi virtuali di classi template

Nel tentativo di trovare una soluzione brillante (ovvero semplice e funzionale), sono incappato in questo dubbio: se io ho un modello di classe, che contiene dei metodi virtuali, una chiamata ad uno di viene automaticamente risolta alla corretta specializzazione?

Esempio:

template <class A> class CVirt
{
  virtual void Inizializza()
  {
    data = 0;
  };
  private:
  A data;
}

main()
{
  class CVirt <int> *iVirt;
  iVirt = reinterpret_cast<CVirt<int>new CVirt<double>;
  iVirt->Inizializza();
}
Michele

PS: Tutto questo perché vorrei implementare una collezione (array/lista) di oggetti che hanno una struttura comune, ma che possono contenere dati di tipo diverso (vedi 'data' che può essere, ad esempio, int, double, ecc...)

2 Risposte

  • Re: Metodi virtuali di classi template

    No. Solo alla specializzazione fornita e alle sue derivate.
    CVirt<int> non ha niente a che fare con CVirt<double>.
    Tutto questo perché vorrei implementare una collezione (array/lista) di oggetti che hanno una struttura comune, ma che possono contenere dati di tipo diverso (vedi 'data' che può essere, ad esempio, int, double, ecc...)
    boost::any fa al caso tuo.
    (Tra l'altro studiarla è un'ottima palestra per risolvere casi simili.)
  • Re: Metodi virtuali di classi template

    Infatti, stavo rifleddendo poco fa sul fatto che la virtualizzazione di metodi lavora sulle derivazione di classi, mentre la specializzazione produce classi differenti ed indipendenti fra loro.

    Ho messo nella lista delle cose da vedere, appena avrò un po' di tempo (ho troppe cose avviate e non terminate, per il momento).

    Ho programmato in objective-c, per un breve periodo e solo a livello didattico, e me ne sono innamorato!!!
Devi accedere o registrarti per scrivere nel forum
2 risposte