c++ - (extract from istream and insert into ostream) operation: is >><T> os; -


i trying overload operator>> in order extract type t istream x; , insert ostream y;, i.e. x >><t> y;.

with

template<class t> istream& operator>>(istream& is, ostream& os) {     t a;     >> a;     os << a;     return is; } 

the prefix notation operator>><string>(x,y); compiles, postfix notation x >><string> y; fails compile with

test.cpp:29:9: error: expected expression     x >><string> y;         ^ test.cpp:29:10: error: unexpected type name 'string': expected expression     x >><string> y;          ^ 2 errors generated. 

and guess >><t> notation not valid.

just curious if there way postfix version compile? or maybe thoughts whether extract/insert operator makes sense @ all?

short answer, no. operator overloading proceeds according strict grammatical rules, binary operator @, expression a @ b considers overloaded functions (a).operator@(b) , operator@(a, b).

the right thing in case make wrapper object:

template <typename t> class pass {     std::ostream & os_; public:     pass(std::ostream & os) : os_(os) {}      friend std::istream & operator>>(std::istream & is, pass & p)     {         t x;         if (is >> x) { p.os_ << x; }         return is;     }      friend std::istream & operator>>(std::istream & is, pass && p)     {         return >> p;     } }; 

usage:

std::cin >> pass<int>(std::cout); 

note we're taking pass<t> object rvalue reference allow construction.


Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

inno setup - TLabel or TNewStaticText - change .Font.Style on Focus like Cursor changes with .Cursor -