Il CRTP è usato molto? e perché è / non lo è? [chiuso]

10

Sto pensando a modello di template curiosamente ricorrente .

Lo trovo abbastanza utile, ed è abbastanza ben regolabile per molte attività. Ma devo ammettere che non vedo gran parte del codice CRTP in the wild.

È difficile da capire? Le funzioni virtuali sono più semplici nel complesso? Non dovrebbe essere usato per il 90% dei casi in cui appare la parola chiave virtuale?

    
posta Coder 08.12.2011 - 00:47
fonte

3 risposte

9

Il semplice fatto è che molti, se non la maggior parte, gli utenti del C ++ difficilmente possono capire che vector è migliore di malloc e free , quindi il numero che non solo può apprezzare ma implementare la metaprogrammazione avanzata del modello non è molto alta. Questo implica che anche se fosse buono per il 90% delle situazioni, lo vedresti molto meno, semplicemente perché le persone non lo sapevano o come usarlo.

Tuttavia, le funzioni virtuali fanno hanno vantaggi, in particolare le funzioni virtuali sono molto più facili da usare rispetto al CRTP. I modelli di C ++ sono famosi per essere stronzi virtualmente su tutto e qualsiasi cosa, e il modello di inclusione fa schifo.

Tuttavia, [le funzioni virtuali] sono nettamente più lente e meno potenti. Ad esempio, in questo momento sto scrivendo il codice utilizzando il CRTP, in cui si ereditano gli overload dell'operatore da utilizzare con i modelli di espressione. In nessun modo le funzioni virtuali potrebbero far funzionare il lavoro.

    
risposta data 08.12.2011 - 21:44
fonte
5

WTL utilizza il CRTP. Il browser Chromium è un noto esempio di software che utilizza WTL, quindi direi che è usato "in the wild".

Circa il 90%? Questo è sicuramente un'esagerazione. Hai mai usato un contenitore di oggetti polimorfici? Questo è un uso molto comune del polimorfismo e non è possibile farlo con CRTP perché Base<DerivedA> non è uguale a Base<DerivedB> .

    
risposta data 08.12.2011 - 01:10
fonte
-5

Ecco i motivi per cui non viene utilizzato più ampiamente:

  1. È un hack
  2. Come un hack, non è garantito che tu non abbia problemi quando lo usi. I normali file OO sono stati utilizzati da un numero elevato di progetti e hanno trovato che funzionano correttamente / i problemi sono ben noti, il CRTP si trova in un numero limitato di progetti e non sono disponibili dati
  3. non ci sono buoni motivi per usarlo - la maggior parte dei motivi non sono validi
  4. può rendere alcune cose più complicate
risposta data 08.12.2011 - 21:10
fonte

Leggi altre domande sui tag