Это зависит от структуры Нечто. Но как общий принцип проектирования, ваши классы должны быть невежественными, когда это возможно.
При этом, если вы хотите иметь возможность (де) сериализовать ваши объекты, я бы смоделировал ваши методы ввода / вывода на встроенных интерфейсах библиотеки потоков ввода / вывода. Тогда ваши объекты будут поддерживать ввод / вывод в / из консоли, файлы, все остальное, что наследуется от istream
или ostream
.
Помимо поддержания согласованного интерфейса со стандартной библиотекой (и тоннами стороннего кода), адаптация интерфейса потоков ввода-вывода также облегчает написание вашего метода. Если что-то имеет int 'id' и строковый член 'name':
ostream& operator << (ostream& os, const Something& thing)
{
os << thing.id;
os << thing.name;
return os;
}
Если члены Something более сложны, вы реализуете операторы << и >> для этих типов и так далее по цепочке.