Question

J'ai un projet qui me demande d'insérer un filtre dans un flux de sorte que les données sortantes seront modifiées en fonction du filtre. Après quelques recherches, il semble que ce que je veux faire est de créer un filtered_streambuf comme ceci:

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

Et puis insérez un filtered_streambuf<> dans le flux selon que je dois filtrer. Mon problème est que je ne sais pas ce que je dois invariants maintenir tout en filtrant un cours d'eau, afin de faire en sorte que

  • Les classes dérivées peuvent fonctionner comme prévu. Je trouve, en particulier, je filtered_streambufs construit sur d'autres filtered_streambufs.
  • Tous les différents inséreuses de flux, extracteurs et manipulateurs travail comme prévu.

Le problème est que je ne peux pas sembler juste de comprendre ce que l'interface est minimale que je dois fournir afin de garantir qu'un iostream aura ce dont il a besoin correctement au travail.

En particulier, ai-je besoin de simuler le mouvement des variables de pointeur protégées, ou non? Ai-je besoin d'un tampon de données de faux, ou non? Puis-je passer outre les fonctions publiques, les réécrire en termes de streambuf de base, ou est-ce trop simpliste?

Était-ce utile?

La solution

Boost.Iostreams peut être utile pour vous.

De la documentation:

  

Boost.Iostreams a trois objectifs:

     
      
  • Pour le rendre facile de créer des flux standard C ++ et des tampons de flux pour   l'accès à de nouvelles sources et puits.
  •   
  • Fournir un cadre pour Filtres définissant et les attacher à la norme   cours d'eau et les tampons de flux.
  •   
  • Fournir une collection de filtres prêts à l'emploi, les sources et   Éviers.
  •   

Je l'ai à peine utilisé que libary moi-même, donc je ne peux pas commenter davantage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top