Una volta, ero certo che non si potesse fare questo, ma l'altro giorno stavo giocando con un po 'di codice e sembrava compilare e lavorare. Voglio solo verificare che non sto solo diventando fortunato. Una classe template può avere una funzione virtuale pura - che suppongo significherebbe anche solo semplici metodi virtuali sarebbe valida anche per il distruttore?I metodi virtuali puri sono consentiti all'interno di una classe template?
template <typename WordType> class DataSource
{
public:
DataSource();
DataSource(DataSource const& other);
virtual ~DataSource();
virtual void Put(
WordType const* const data,
unsigned int const wordCount) = 0;
}
ho provato a guardare in su in linea e tutto quello che ho potuto trovare è che non si può avere un metodo virtuale (puro o altro) in una classe normale, come ad esempio questo:
class DataSource
{
public:
DataSource();
DataSource(DataSource const& other);
virtual ~DataSource();
template <typename WordType>
virtual void Put(
WordType const* const data,
unsigned int const wordCount) = 0;
}
E questo è dovuto all'impossibilità di gestire una tabella virtuale per fare riferimento a tutti i diversi tipi di tipi possibili con cui questo metodo sarebbe stato istanziato.
Tuttavia, quando si tratta di una funzione membro virtuale di una classe template, sembra essere diverso perché l'intera classe stessa viene "creata" tramite il parametro template quando la variabile di classe template viene instanciata. A questo punto, il metodo virtuale è proprio come qualsiasi altro metodo virual di una classe a causa della natura "find-and-replace" dei template.
In ogni caso, ripetendo la domanda in caso di smarrimento: Le funzioni virtuali virtuali (pure e/o normali) sono consentite all'interno di una classe temporanea?
Suona come hai già capito la risposta a questa ... –
Come ho detto, io giuro a me stesso che ho provato prima e aveva problemi. Quando ha funzionato all'improvviso, volevo essere certo che non fosse solo perché ero su un compilatore diverso, diversi flag di avviso/errore, ecc. E che era stato definito, preferibilmente, che era normale per lo standard. – Anthony
Inoltre, per quello che vale, non ho trovato nulla online che dicesse definitivamente in un modo o nell'altro. Quale posto migliore per mettere queste informazioni di SO? – Anthony