Распространенной идиомой является создание перегрузки operator<<
, которая принимает выходной поток в качестве левого операнда.
#include <iostream>
struct Point
{
double x;
double y;
Point(double X, double Y)
: x(X), y(Y)
{}
};
std::ostream & operator<<(std::ostream & Stream, const Point & Obj)
{
// Here you can do whatever you want with your stream (Stream)
// and the object being written into it (Obj)
// For our point we can just print its coordinates
Stream<<"{"<<Obj.x<<", "<<Obj.y<<"}";
return Stream; // return the stream to allow chained writes
}
int main()
{
Point APoint(10.4, 5.6);
std::cout<<APoint<<std::endl; // this will print {10.4, 5.6}
return 0;
}
Если вы хотите поддерживать потоки с другими типами символов (например, wchar_t
) / параметры шаблона для потоков, которые вы должны записать для различных типов потоков, которые вы хотите поддерживать, должны создавать различные перегрузки, или, если ваш код (более или менее) независим от таких типов, вы можете просто написать шаблон operator<<
.