Domanda

Ho un progetto che mi obbliga a inserire un filtro in un flusso in modo che i dati in uscita verranno modificati in base al filtro. Dopo alcune ricerche, sembra che quello che voglio fare è creare un filtered_streambuf in questo modo:

template <class StreamBuf>
class filtered_streambuf: public StreamBuf
{ ... }

e quindi inserire un filtered_streambuf<> in qualunque flusso I bisogno di essere filtrato. Il mio problema è che io non so cosa invarianti ho bisogno di mantenere, filtrandolo un torrente, al fine di garantire che

  • Le classi derivate può funzionare come previsto. In particolare, posso trovare Ho filtered_streambufs costruiti su altri filtered_streambufs.
  • Tutte le varie inseritori flusso, estrattori e manipolatori di lavoro come previsto.

Il problema è che io proprio non riesco a capire cosa l'interfaccia minimale è che ho bisogno di fornire in modo da garantire che un iostream avrà ciò di cui ha bisogno per funzionare correttamente.

In particolare, ho bisogno di falsificare il movimento delle variabili puntatore protette, o no? Ho bisogno di un buffer di dati falsi, o no? Posso solo sovrascrivere le funzioni pubbliche, li riscrittura in termini di streambuf di base, o è che troppo semplicistico?

È stato utile?

Soluzione

Boost.Iostreams possono essere utile a voi.

Dalla documentazione:

  

Boost.Iostreams ha tre obiettivi:

     
      
  • Per rendere più semplice la creazione di flussi standard C ++ e buffer di flusso per   accedere a nuove sorgenti e pozzi.
  •   
  • Per fornire un quadro di riferimento per Filtri definiscono e le collega al normale   ruscelli e buffer ruscello.
  •   
  • Per fornire una collezione di ready-to-utilizzare filtri, fonti e   Lavelli.
  •   

Ho appena usato quella libary me stesso, quindi non posso commentare ulteriormente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top