1
std::ostream & _return  = ::operator<<(_os, _event)

Especially I would like to know: What is the data type of _return and How can I print it in console.

Noel
  • 10,152
  • 30
  • 45
  • 67

2 Answers2

2

std::ostream & _return = ::operator<<(_os, _event);

Especially I would like to know: What is the data type of _return and How can I print it in console.

The code looks for an operator<< at global scope (not in any namespace), which can accept the _os and _event objects as parameters. It's not necessarily true, but given "<<" is the normal way streaming output is done in C++, you can expect that it's probably going to be a function such as:

std::ostream& operator<<(std::ostream&, const Event&);

Where Event is whatever type the _event object has, and I've assumed _os will be some type derived from std::ostream, and consequently able to be handled by a reference to std::ostream.

Almost all such operator<< functions return their first stream argument, so your code is probably doing some output, then effectively assigning to _return as if it were:

std::ostream& _return = _os;

Here, the static type of _return itself is std::ostream& - a reference to a std::ostream (Standard output stream) object, but the run-time type will be whatever type _os has... that's the type of object that operations on _return will invoke polymorphically. This could be ofstream, ostringstream or many other types.

How can I print it in console.

There is no Standard way to get textual type names in C++, though runtime polymorphic types do have runtime type information that includes an optional textual field that's normally populated with a type name of some sort - whether it will have full namespace qualifiers, name mangling or whatever is unspecified, but you can try it easily enough:

std::cout << typeid(_return).name() << '\n';

(For GCC, see Unmangling the result of std::type_info::name for tips on unmangling such type names)

Community
  • 1
  • 1
Tony Delroy
  • 102,968
  • 15
  • 177
  • 252
0

_return is just a variable of type "Reference to std::ostream class object". And it is initialized with a return value of << operator in global namespace ::operator<<(ostream& os, const some_Obj_reference& ref).

Ttis could be as well std::ostream & _return = (_os <<_event);

Danylo Fitel
  • 606
  • 1
  • 6
  • 8