2012-02-19 10 views
7

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*>?

+0

È 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

risposta

8

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.

+0

Ha senso. Sembra un po 'hacky. –

3

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).

+0

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 *? –

Problemi correlati