Скажем есть во такое:
struct Node {};
class BaseSource {
public:
virtual ~BaseSource() {}
virtual bool getNode(size_t idx, Node& node) = 0;
virtual bool addNode(const Node& node) = 0;
size_t size() const { return size_; }
protected:
size_t size_;
};
class MemSource : public BaseSource {
//code
};
class FileSource : public BaseSource {
//code
};
интерфейс BaseSource использовался чтобы показывать содержимое
внезависимости от источника.
Но возникла проблема надо BaseSource копировать один в другой,
вернее
MemSource -> FileSource
FileSource -> FileSource
Можно сделать это опираясь на интерфейс BaseSource,
но это хоть и дешево относительн кода и красиво на мой взгляд,
не нравиться пользователю, т.к. в случае
FileSource->FileSource
занимает кучу времени: Node храняться на диске в упакованном виде,
и вместо распоковка -> перегон в буфер -> запаковка,
можно просто скопировать файл.
Как наиболее правильно реализовать на C++?
virtual BaseSource& operator=(const BaseSource&) ?
или виртуальный operator= лучше не определять и сделать метод copy?
использовать dynamic_cast в FileSource и выполнять оптимизированную версию
если не NULL или есть другие способы?