| delorie.com/archives/browse.cgi | search |
| X-Authentication-Warning: | delorie.com: mail set sender to djgpp-bounces using -f |
| From: | "Anthony" <akantsel AT integra DOT rmt DOT ru> |
| Newsgroups: | comp.os.msdos.djgpp |
| Subject: | Why does this code fails? |
| Date: | Thu, 11 Mar 2004 14:11:07 +0300 |
| Organization: | Radio-MSU NOC, Moscow State University |
| Lines: | 50 |
| Message-ID: | <c2phh0$17jb$1@alpha2.radio-msu.net> |
| NNTP-Posting-Host: | integra.rmt.ru |
| X-Trace: | alpha2.radio-msu.net 1079003488 40555 81.13.30.150 (11 Mar 2004 11:11:28 GMT) |
| X-Complaints-To: | usenet AT radio-msu DOT net |
| NNTP-Posting-Date: | Thu, 11 Mar 2004 11:11:28 +0000 (UTC) |
| X-Priority: | 3 |
| X-MSMail-Priority: | Normal |
| X-Newsreader: | Microsoft Outlook Express 6.00.2600.0000 |
| X-MimeOLE: | Produced By Microsoft MimeOLE V6.00.2600.0000 |
| To: | djgpp AT delorie DOT com |
| DJ-Gateway: | from newsgroup comp.os.msdos.djgpp |
| Reply-To: | djgpp AT delorie DOT com |
#include <iostream>
#include <stdexcept>
#include <fstream>
class mystream {
private:
std::ostream *pstream;
public:
mystream(std::ostream& s) : pstream(&s) {}
mystream() : pstream(NULL) {}
operator std::ostream&() throw(std::runtime_error)
{
if(pstream) {
return *pstream;
} else {
throw std::runtime_error("Convertion of NULL stream.");
}
}
void assign(std::ostream& s);
...
};
mystream mstr;
int main()
{
mstr.assign(std::cout);
try{
static_cast<std::ostream&>(mstr) << "Hello world"; // This compiles
fine
mstr << "Hello world"; //
This gives error 'no match for operator<< 'in mstr << "Hello world"'
}
catch(std::runtime_error& err) {
std::cerr << "\n ERROR: " << err.what();
}
std::cin.get();
return 0;
}
-------------------------------------
Why doesn't convertion by default work? How to make it work with no
cast-ing?
The goal is to have a global static reference to a stream, where some code
can do output and another code can change this output destanation, like make
it go to cout, then after sometime to a file stream, etc. Is there better
way to do this than this code?
Thanks.
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |