История изменений
Исправление Deleted, (текущая версия) :
Вроде обычный логгинг или дебажная печать объектов. У каждого элементарного объекта пусть будет метод sprint()
struct Point {
int x, y;
std::string sprint(int level) const
{
std::stringstrream ss;
if(level == FULL)
ss << "Point{" << x << "," << y << "}";
else
ss << x;
return ss.str();
}
};
У каждого составного объекта будет тоже метод sprint(), в котором вызываются методы sprint() всех внутренних объектов
struct Shape {
Point a, z;
std::string sprint(int level) const
{
std::stringstrream ss;
if(level == FULL)
ss << "Shape{a:" << a.sprint(level) << ", b:" << b.sprint(level) <<"}";
else
ss << b.sprint(level);
return ss.str();
}
}
А параметром level (или назвать его по другому, если смысл другой: verbose, format) регулируется степень многословности, или формат вывода, насквозь, по всей рекурсивной иерархии вызовов sprint() объекта, начиная с самого верхнего уровня
PS. считаю, что перегружать operator<<() - излишне, особенно если печать нужно параметризировать.
Исправление Deleted, :
Вроде обычный логгинг или дебажная печать объектов. У каждого элементарного объекта пусть будет метод sprint()
struct Point {
int x, y;
std::string sprint(int level) const
{
std::stringstrream ss;
if(level == FULL)
ss << "Point{" << x << "," << y << "}";
else
ss << x;
return ss.str();
}
};
У каждого составного объекта будет тоже метод sprint(), в котором вызываются методы sprint() всех внутренних объектов
struct Shape {
Point a, z;
std::string sprint(int level) const
{
std::stringstrream ss;
if(level == FULL)
ss << "Shape{a:" << a.sprint(level) << ", b:" << b.sprint(level) <<"}";
else
ss << b.sprint(level);
return ss.str();
}
}
А параметром level (или назвать его по другому, если смысл другой: verbose, format) регулируется степень многословности, или формат вывода, насквозь, по всей рекурсивной иерархии вызова sprint() объекта самого верхнего уровня.
PS. считаю, что перегружать operator<<() - излишне, особенно если печать нужно параметризировать.
Исправление Deleted, :
Вроде обычный логгинг или дебажная печать объектов. У каждого элементарного объекта пусть будет метод sprint()
struct Point {
int x, y;
std::string sprint(int level) const
{
std::stringstrream ss;
if(level == FULL)
ss << "Point{" << x << "," << y << "}";
else
ss << x;
return ss.str();
}
};
У каждого составного объекта будет тоже метод sprint(), в котором вызываются методы sprint() всех внутренних объектов
struct Shape {
Point a, z;
std::string sprint(int level) const
{
std::stringstrream ss;
if(level == FULL)
ss << "Shape{a:" << a.sprint(level) << ", b:" << b.sprint(level) <<"}";
else
ss << b.sprint(level);
return ss.str();
}
}
А параметром level (или назвать его по другому, если смысл другой: verbose, format) регулируется степень многословности, или формат вывода, насквозь, по всей рекурсивной иерархии вызова sprint() объекта самого верхнего уровня.
Исходная версия Deleted, :
Вроде обычный логгинг или дебажная печать объектов. У каждого элементарного объекта пусть будет метод sprint()
struct Point {
int x, y;
std::string sprint(int level) const
{
std::stringstrream ss;
if(level == FULL)
ss << "Point{" << x << "," << y << "};
else
ss << x;
return ss.str();
}
};
У каждого составного объекта будет тоже метод sprint(), в котором вызываются методы sprint() всех внутренних объектов
struct Shape {
Point a, z;
std::string sprint(int level) const
{
std::stringstrream ss;
if(level == FULL)
ss << "Shape{a:" << a.sprint(level) << ", b:" << b.sprint(level) <<"}";
else
ss << b.sprint(level);
return ss.str();
}
}
А параметром level (или назвать его по другому, если смысл другой: verbose, format) регулируется степень многословности, или формат вывода, насквозь, по всей рекурсивной иерархии вызова sprint() объекта самого верхнего уровня.