1 — Похоже ли на правильный подход использовать операторы извлечения для извлечения некоторых данных не из файла, а из большой и сложной иерархии классов?
class ComplexInterface
{
//...
};
struct EXTRACTED_DATA
{
//...
friend ComplexInterface& operator>>(const ComplexInterface& interface, EXTRACTED_DATA& extracted)
{
extracted.m_member = interface.someAccessor().getData();
}
};
Было бы лучше просто сделать его методом-членом (void extractFromComplexInterface(const ComplxInterface&)
)
Есть ли лучшее решение ?
2 — Возможно ли обрабатывать это извлечение как обычную потоковую операцию? ComplexInterface
станет istream
, реализуя какую-то магическую функцию, в которой было бы сказано: «Я отправлю эти данные, затем то и это …». Затем EXTRACTED_DATA может использовать свой обычный оператор извлечения (friend istream& operator>>(istream&, EXTRACTED_DATA&)
), который уже определен для чтения из файлового потока.
Если это возможно, то как?
Задача ещё не решена.
Других решений пока нет …