Il boost ptr_list documentation indica che il contenitore utilizza un sottostante std::list<void*>
.Perché boost :: ptr_list utilizza il sottostante * void?
Perché utilizzano questo tipo invece di uno più specializzato std::list<T*>
?
Il boost ptr_list documentation indica che il contenitore utilizza un sottostante std::list<void*>
.Perché boost :: ptr_list utilizza il sottostante * void?
Perché utilizzano questo tipo invece di uno più specializzato std::list<T*>
?
Probabilmente è necessario ridurre il numero di istanze del modello. Se utilizza uno std::list<T*>
, ogni istanza di ptr_list<T>
crea anche un'istanza std::list<T*>
. Sono molte le istanze se usi molto lo ptr_list
.
Ha senso. Sembra un po 'hacky. –
Ciò semplifica la condivisione di quasi tutto il codice indipendentemente dal/i tipo/i su cui viene creato. Quasi tutto il codice è nel singolo std::list<void *>
. Ogni istanza aggiunge solo il codice da trasmettere tra T *
e void *
dove necessario.
Naturalmente, i compilatori/linker moderni possono fare una buona parte di questo senza tale aiuto, ma questo non è sempre stato il caso (e alcune persone usano ancora vecchie catene di strumenti, per vari motivi).
Non capisco cosa intendi: boost :: ptr_list e std :: list sono template, quindi dovrebbero funzionare qualunque sia il tipo sottostante, isn ' vero? Perché dovrebbe essere richiesto di usare void *? –
È difficile dirlo perché non ho idea di boost. Ma la connessione che posso vedere è nullo * può essere convertito in un qualsiasi tipo, quindi potrebbe renderlo simile a T * di cui stai parlando. Tutti i modi sarebbero in attesa di risposte da altri membri della nostra società stimati – Invictus