Bonjour,

Je cherche à surcharger les operateurs de stream (istream & ostream), pour pouvoir ecrire/lire simplement.

Voici la classe qui utilisera les surcharges:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    class header
    {
    public:
        typedef std::shared_ptr<header> ptr;
        // --
        static const short_t version_size   = 5;
        static const short_t header_size    = 5;
        // --
        header() : m_version(), m_header() {}
        header(const std::string& v, const std::string& h) :
            m_version(v), m_header(h) {}
        virtual ~header() {}
        std::ostream& operator<<(std::ostream& os);
        std::istream& operator>>(std::istream& is);
        const std::string& version() const { return m_version; }
        const std::string& unique_id() const { return m_header; }
    private:
        std::string m_version;
        std::string m_header;
    };
Et voici la classe qui va appeler l'operateur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    template<typename StreamType>
    class pack
    {
    public:
        typedef std::shared_ptr<pack> ptr;
        pack() : m_stream(), m_header() {}
        pack(const pack<StreamType>& p) = delete;
        pack& operator=(const pack<StreamType>& p) = delete;
        virtual ~pack() { m_stream.close(); }
        node::ptr open(fs::path& p)
        {
            m_stream.open(p(false), std::istream::in | std::istream::binary);
            m_stream >> m_header;
/// ...
            return rootnode;
        }
        const fs::header::ptr header() const { return m_header; }
        StreamType& stream() { return m_stream; }
    private:
        StreamType m_stream;
        fs::header::ptr m_header;
    };
Et l'erreur ...
error: cannot bind ‘std::basic_istream<char>’ lvalue to ‘std::basic_istream<char>&&’|
Ca doit etre encore simple comme bonjour, mais je ne sais point résoudre
Que faut-il changer?

merci,
nico