Check if ostream object is cout or ofstream, c++

后端 未结 4 1898
北恋
北恋 2020-12-06 11:26

Is there a way in C++ to check if an ostream object is cout or a ofstream object?

Something like:

ostream& ou         


        
4条回答
  •  醉话见心
    2020-12-06 11:59

    I consider changing how you stream based on the object you are streaming to do be a horrible idea that completely ignores the whole point of how the stream objects are intended to work. So, I would create a member class or function which returns an object of a type that handles the stream differently. So, for example, if you wanted to provide a colorized stream, you would call:

    std::cout << myclass.colorstreamer << endl;
    

    Edit:

    Your proposal for handling streams is a bad idea because you have no clue how other people are going to use your code. It is completely unintuitive for a stream to behave differently depending on what object is doing the streaming. I liken this to having a function which returns a different result depending on who called it rather than dependent on what its arguments are, though I acknowledge that technically the stream is an argument.

    As for how to do it this way, one way would be to create a colorstreamer, make this new class a member of myclass and make myclass a member of colorstreamer, then make colorstreamer's stream operator a friend of myclass. I'm more worried about the semantics of calling the function (i.e. using .colorstreamer to control how it streams rather than using the stream itself) than I am about how to implement it. My suggestion for how to implement it is quite possibly a bad way to do it; my C++ is rusty.

提交回复
热议问题