2013-05-11 9 views
9

Voglio creare un gestore dati tubo e filtro based che devono manipolare serie di dati in arrivo in questo modo, ma non neccessarily limitati a:modo più elegante per implementare Pipe and Pattern filtro

tubo fonte (potrebbe essere un insieme di dati da un db) < -sink-source-> filter (aggiungi un campo aggiuntivo) < -sink-source-> filter (manipola altri dati/rimuovi cioè annulla set di dati)

Ho un'idea di come tale architettura sembra come in C/C++. Ma dato tutte le chicche che vengono con aspetti funzionali C++ 11 di, spero che questo compito può essere fatto in modo elegante in modo che sia in grado di:

  • facilmente scalabile e utilizzarlo in un ambiente con multithreading (ad esempio, eseguendo operazioni filtra come funcions lambda, quindi probabilmente evitando almeno alcuni di manipolazione del filo)
  • facilmente aggiungere e rimuovere i filtri a runtime
  • ingresso
  • gestire flussi pigramente

risposta

3

Ciò che si sta descrivendo è una sorta di di streaming architettura o architettura pipeline. Il C++ standard non ha nulla di specifico, ma fornisce, come autore della libreria, le primitive necessarie nel linguaggio e nella libreria standard per costruire tale architettura. È sufficiente creare classi e interfacce secondo la normale programmazione orientata agli oggetti e quindi istanziarle e collegarle in una pipeline secondo le proprie esigenze.

Per esempio si potrebbe avere un'interfaccia Source e un'interfaccia Sink - e una classe astratta che implementa Filter sia Source e Sink, così come una classe che implementa Pipe sia Source e Sink e solo passa i dati di dritto. Questo è solo uno dei tanti modi per nominare e organizzare un tale quadro.

+0

si dice "di serie C++ non ha nulla di specifico ", che è corretto. Tuttavia, so già come sarebbe una implementazione comune in C++ (come nel tuo esempio). Ma era interessato a qualcosa – benjist

+0

@benjist: la generalità della mia risposta corrisponde alla generalità della tua domanda. La tua domanda farebbe meglio se chiedessi qualcosa di più specifico. "Qual è il modo più elegante per implementare il modello di progettazione X?" è eccessivamente ampio e soggettivo. –

+0

Siamo spiacenti, il mio commento precedente è stato abbreviato. Hai ragione che la domanda è un po 'generica. Ma la mia domanda è ancora se non c'è un modo più elegante per i tre requisiti/desideri che ho affermato ora con C++ 11. Per un esempio, non sarebbe possibile avere un vettore di filtri e usare std :: transform per applicare questi filtri sui dati? Non potrebbe rendere più semplici le attività parallele? Ecc. – benjist

Problemi correlati