Is it possible to define a static insertion operator which operates on the static members of a class only? Something like:
class MyClass
{
public:
static std::string msg;
static MyClass& operator<< (const std::string& token) {
msg.append(token);
return *this; // error, static
}
};
alternatively:
static MyClass& operator<< (MyClass&, const std::string &token)
{
MyClass::msg.append(token);
return ?;
}
This is how I would like to use it:
MyClass << "message1" << "message2";
Thank you!
If all the members of
MyClass
are static, it's possible to return a fresh instance.However, returning a reference poses a problem. There are two solutions:
The second approach is easiest:
The first is one line more:
Usage is very close to what you want:
However, I would not recommend to do this. Why don't you just just use a
std::ostringstream
? You'll get formatting and some more for free. If you really need global access, declare a global variable.You can't. A class-name / type is not a value in itself, you would need an expression like
so that your static
operator<<
would be usable, but that is not valid C++. The grammar summary at A.4 shows that putting a type's name there is not valid.Consider also that operator overloads are just functions with flaky names:
And functions in C++ (and most other languages, e.g. C#) can only work on instances of types, not types themselves.
However, C++ offers templates which have type arguments, howhowever, that would not help you to overload functions upon types.
If you want to use your class as cout, what you can do is example
Output should look like each string in new line like this:
Server started... To exit press CTRL + Z
What I would probably do in your situation, is create another class that overloads the
operator<<
, then make a static member of that type. Like this:Using it is not quite what you asked for, but close enough I think: