IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

hérité directement de ios_base


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Par défaut hérité directement de ios_base
    Bonjour à tous,
    J'implémente actuellement un petit wrapper c++ de ffmpeg, en m'inspirant des streams c++, sauf qu'au lieu d'extraire des caractère j'extrais des frames (image rgb ou audio). J'ai implémenté une classe inspirée de std::ios_base (dont hérite ma classe ffmpeg_istream) avec les méthodes eof(),fail(),rdstate(), ect... Ma question est la suivant: puisque que tout ceci est déjà implémenté dans ios_base, serait-il possible d'hériter directement de ios_base ou est-ce une très mauvaise idée (si oui pourquoi)?

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    De manière générale, on ne peut sincèrement pas estimer qu'un wrapper est - sémantiquement parlant - un flux de données.

    Un wrapper est une classe qui permet certaines opérations sur des données, dont celles qui consistent à envoyer ou à recevoir ces données vers/ au départ d'un flux

    Il ne semble donc pas opportun, ne serait-ce que parce que le principe de substitution de liskov ne sera vraiment pas respecté, d'envisager de faire hériter ton wrapper d'une quelconque classe de gestion de flux

    Je me demande même s'il est opportun de donner la responsabilité à ton wrapper de s'occuper du rdstate

    En outre, les différents flux n'ont me semble-t-il pas vocation à servir pour l'héritage.

    Bref, tu l'auras compris, pour ma part je te déconseille ce point de vue
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Citation Envoyé par vikki Voir le message
    serait-il possible d'hériter directement de ios_base ou est-ce une très mauvaise idée (si oui pourquoi)?
    C'est une très mauvaise idée.











    Ah oui, pourquoi ?
    Déjà parce que ios_base déclare tout une pelletée de flag (boolalpha, dec, fixed, hex, internal, left, oct, right, scientifc, left, oct, right, showbase .... etc) et de fonctions (setf(), precision(), width(), unsetf(), imbue(), getloc()) dont tu n'as pas forcément besoin mais surtout parce que:
    Citation Envoyé par Standart C++ IOStreams and Locales
    Responsability for error handling
    One might except that the error handling would be contained in ios_base because error indication is charactere-independant. However, the functionality for access to the stream state and the exception mask is located in class basic_ios<class charT, class Traits>. Class ios_base contains only the definition of all stream state flags, such as basbit, eofbit, etc. Access to the stream state and the exception mask is via member function of class basic_ios<class charT, class Traits>, by invoking functions like exception(), good(), bad(), setstate(). [...]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void foo(ios_base& str)
    {
       int idx = str.xalloc(); // might set badbit in case of memory shortage
     
       if( str.fail() )  // does not work; no access to the stream state here.
         ...
    }

  4. #4
    Membre expérimenté Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Par défaut
    Désolé pour la réponse tardive, pas mal de boulot en ce moment. Bon, effectivement j'ai pas besoin de tous les flags et fonctions definies dans ios_base, donc on va oublier. Je vais me contenter de m'inspirer de l'architecture des flux de la stl sans les utiliser. Merci pour vos réponses claires

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sdk Direct X 8.1
    Par ShinMei dans le forum DirectX
    Réponses: 1
    Dernier message: 23/02/2003, 17h39
  2. Accès direct au disque dur
    Par Berdo dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 12/01/2003, 16h21
  3. Direct Graphics
    Par Blustuff dans le forum DirectX
    Réponses: 9
    Dernier message: 28/10/2002, 04h19
  4. Hors série PCTEAM sur Direct 3D
    Par Shakram dans le forum DirectX
    Réponses: 1
    Dernier message: 12/10/2002, 16h34
  5. La communauté Direct X est au repos?
    Par Shakram dans le forum DirectX
    Réponses: 21
    Dernier message: 18/07/2002, 23h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo