2010-04-23 15 views
7

Sto imparando STL e schemi di progettazione. Volevo sapere v'è alcun documento o link che spiega come i modelli di progettazione sono implementati in STL ho fatto il google ma non in grado di ottenere più datiutilizzati in STL (libreria di modelli standard)

+3

L'STL è una programmazione generica non orientata agli oggetti. Hai bisogno di riadattarti. – KitsuneYMG

+1

@kts: i modelli di progettazione non sono esclusivi della progettazione orientata agli oggetti. –

+0

Guardate qualche implementazione STL. Il codice sorgente può rispondere a molte domande. – Ross

risposta

12

Spero che tu intenda "quali modelli di progettazione possono essere identificati nell'STL".

Lo stack STL è un adattatore contenitore. Un adattatore è un modello di progettazione. L'iteratore è anche un modello di progettazione. Gli oggetti funzione STL sono correlati al modello di comando.

Patterns:

  1. Adattatori (adattatori container)
    • pila
    • code
    • code di priorità
  2. Iterator
  3. Comando + adattatore (adattatori funzione)
  4. Iterator + adattatore (adattatori iterator_traits)
    • iteratori inversi
    • iterators inserto
    • iterators streaming
  5. Template Method (algoritmi STL utilizzando le funzioni specificate dall'utente)
  6. Quale modello creazionale ? (Allocators)

Il modo in cui questi schemi sono implementati è molto diverso dal modo in cui sono implementati in un design orientato agli oggetti. Josuttis ha scritto "il concetto di STL contraddice l'idea originale di programmazione orientata agli oggetti". Questo è ciò che sta causando la confusione intorno alla tua domanda.

+0

Avete un esempio per un adattatore iteratore in STL? – Frank

+0

@dehmann: li ho aggiunti. Sentiti libero di modificare la mia risposta. –

+1

5. Metodo del modello (algoritmi STL che utilizzano le funzioni specificate dall'utente) –

1

Penso che il tuo problema è che i modelli di progettazione non sono implementate in STL. Possono essere implementati in C++ e utilizzare contenitori e algoritmi di STL, ma STL e Design Patterns non sono correlati in nessun altro modo.

Il mio consiglio sarebbe quello di conoscere STL leggendo qualcosa come Nicolai Josuttis' excellent book The C++ Standard Library: A Tutorial and Reference o STL Tutorial and Reference Guide. Ciò ti aiuterà nell'apprendimento di ciò che l'STL può fare per te. Quindi scavare nell'implementazione di modelli di progettazione in C++ usando le tue conoscenze sulla STL.

+1

I modelli STL e Design sono decisamente correlati. Riguardano entrambe le astrazioni. –

+0

Iterators è un modello di progettazione. Definito in modo definitivo nell'STL. –

+0

@MartinYork - Nonostante il nome, non sono d'accordo sul fatto che l'implementazione degli iteratori in STL sia un'implementazione del modello di progettazione di Iterator non più degli indicatori. Il pattern Iterator canonico include un metodo per determinare se l'attraversamento non produrrà più elementi senza chiedere la raccolta sottostante. –

1

STL fa ampio uso di modelli. GoF chiama questo tipo di parametri. I modelli sono utili per la personalizzazione di una soluzione di modelli di progettazione o per la creazione di una nuova soluzione intuitiva. (Per ulteriori dettagli, vedere la sezione "Ereditarietà rispetto ai tipi parametrizzati" in "Design Patterns: Elements of Reusable Object-Oriented Software"). Il vantaggio di familiarizzare con STL (e boost) è che sono una buona fonte per conoscere i modelli (e la meta-programmazione) in C++, che a sua volta può essere utilizzato nella progettazione di disegni migliori.

0

Da C++ 11, abbiamo ottenuto threes tipi di smart pointer, cioè, shared_ptr, unique_ptr e weak_ptr, il modello dietro di loro è: modello Proxy.

Problemi correlati