Bug del compilatore con il parametro template = void* - pagina 20

 
pavlick_:

Lampada a bottone attraverso g con virtualità:

Esempi banali.

Questo non è un esempio di polimorfismo né un esempio di pattern. È solo un esempio di utilizzo di una variabile bool e nient'altro (a parte uno spesso strato di husky).

Non c'è modo che i template possano sostituire il polimorfismo.

 
Dmitry Fedoseev:

I template non possono sostituire il polimorfismo in alcun modo.

Dove ho detto il contrario? Il punto è che il polimorfismo sta cercando di sostituire i template.

 
pavlick_:

E dove ho affermato il contrario? Il punto è che il polimorfismo cerca di sostituire i template.

È piuttosto che stai cercando di sostituire il normale approccio OOP con una stampella) I template sono infatti necessari solo per i dati memorizzati e in alcune interfacce come IComparable<T>.

Non ci sono praticamente benefici di performance da loro. Nel tuo secondo esempio, il compilatore inserisce tutto, perché lì tutto non è ambiguo.

 
Alexey Navoykov:

È piuttosto che stai cercando di sostituire il normale approccio OOP con una stampella) I template sono infatti necessari solo per i dati memorizzati e in alcune interfacce come IComparable<T>.

Non ci sono praticamente benefici di performance da loro. Nel tuo secondo esempio, il compilatore inserisce tutto, perché lì tutto non è ambiguo.

Non è il mio esempio, è un classico esempio di inversione di dipendenza. E non prendetevela con la sua semplicità, dimostra solo un'idea, se scrivessi un foglio di codice direste "beh sì, è una cosa diversa"?

I modelli sono diventati una stampella, sì. . Va bene, la finisco qui.

 
A proposito, tornando a void*, ho appena realizzato che anche dynamic_cast non funziona (non compila) con esso in C++, il che è logico, perché abbiamo solo un puntatore impersonale a un'area di memoria. Ecco perché può essere lanciato solo esplicitamente. Di conseguenza, abbiamo bisogno di sapere con certezza che tipo si trova lì. Ecco perché void* da solo è inutile in C++. In MQL è tutto diverso. Ma per motivi di compatibilità dovremmo evitare di usare dynamic_cast e delete con puntatori di tipo void*
Motivazione: