виртуальное копирование и оптимизация
От: Аноним  
Дата: 01.03.07 08:47
Оценка:
Скажем есть во такое:

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 или есть другие способы?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.