std::ostream & _return = ::operator<<(_os, _event)
Особенно я хотел бы знать: каков тип данных _return
и как я могу распечатать его в консоли.
станд :: ostream & _return = :: оператор<<(_os, _event);
Особенно мне хотелось бы знать: что такое тип данных _return и как я могу распечатать его в консоли.
Код ищет operator<<
в глобальном масштабе (не в любом пространстве имен), который может принять _os
а также _event
объекты как параметры. Это не обязательно правда, но дано<<«это нормальный способ потокового вывода в C ++, вы можете ожидать, что это, вероятно, будет такая функция, как:
std::ostream& operator<<(std::ostream&, const Event&);
Где Событие, какой бы тип _event
объект, и я предположил _os
будет какой-то тип происходит от std::ostream
и, следовательно, может обрабатываться ссылкой на std::ostream
,
Почти все такие operator<<
функции возвращают свой первый аргумент потока, поэтому ваш код, вероятно, выполняет какой-то вывод, а затем эффективно присваивает _return
как будто это было:
станд :: ostream& _return = _os;
Здесь статический тип _return
сам по себе std::ostream&
— ссылка на std::ostream
(Стандартный поток вывода), но тип времени выполнения будет любого типа _os
имеет … это тип объекта, с которым работают _return
вызовет полиморфно. Это могло быть ofstream
, ostringstream
или много других типов.
Как я могу распечатать его в консоли.
Стандартного способа получения имен текстовых типов в C ++ не существует, хотя полиморфные типы времени выполнения действительно имеют информацию о типе времени выполнения, которая включает в себя необязательное текстовое поле, которое обычно заполняется каким-либо именем типа — будет ли оно иметь полные квалификаторы пространства имен, искажение имен или что бы то ни было не указано, но вы можете попробовать это достаточно легко:
std::cout << typeid(_return).name() << '\n';
(Для GCC см. Отмена результата std :: type_info :: name советы по разборке таких типов имен)
_return
это просто переменная типа «Ссылка на std::ostream
Объект класса «.
И это инициализируется с возвращаемым значением <<
оператор в глобальном пространстве имен ::operator<<(ostream& os, const some_Obj_reference& ref)
,
Это может быть так же
std::ostream & _return = (_os <<_event);