testcase — кто-нибудь объяснит строку кода C ++

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

Особенно я хотел бы знать: каков тип данных _return и как я могу распечатать его в консоли.

1

Решение

станд :: 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 советы по разборке таких типов имен)

2

Другие решения

_return это просто переменная типа «Ссылка на std::ostream Объект класса «.
И это инициализируется с возвращаемым значением << оператор в глобальном пространстве имен ::operator<<(ostream& os, const some_Obj_reference& ref),

Это может быть так же
std::ostream & _return = (_os <<_event);

0

По вопросам рекламы [email protected]