Bonjour,
Je cherche à surcharger les operateurs de stream (istream & ostream), pour pouvoir ecrire/lire simplement.
Voici la classe qui utilisera les surcharges:
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 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 l'erreur ...
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; };
Ca doit etre encore simple comme bonjour, mais je ne sais point résoudreerror: cannot bind ‘std::basic_istream<char>’ lvalue to ‘std::basic_istream<char>&&’|
Que faut-il changer?
merci,
nico
Partager