std::ostream & _return = ::operator<<(_os, _event)
特に知りたいのは、データ型とは何か_return
、コンソールに出力するにはどうすればよいかです。
std::ostream & _return = ::operator<<(_os, _event);
特に知りたいのは、_return のデータ型とは何か、コンソールに出力するにはどうすればよいかということです。
このコードは、およびオブジェクトをパラメーターとしてoperator<<
受け入れることができるグローバル スコープ (名前空間ではなく) を探します。必ずしも正しいとは限りませんが、"<<" が C++ でストリーミング出力が行われる通常の方法であることを考えると、おそらく次のような関数になると予想できます。_os
_event
std::ostream& operator<<(std::ostream&, const Event&);
ここで、 Event はオブジェクトの型であり、から派生した型であり、結果として への参照によって処理できると_event
仮定しました。_os
std::ostream
std::ostream
ほとんどすべてのそのようなoperator<<
関数は最初のストリーム引数を返すため、コードはおそらく何らかの出力を行ってから_return
、あたかも次のように効果的に割り当てます。
std::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 の戻り値で初期化されます::operator<<(ostream& os, const some_Obj_reference& ref)
。
Ttisもそうかもしれません
std::ostream & _return = (_os <<_event);