Здравствуйте, Chorkov, Вы писали:
C>В случае детей, если я правильно понял, все внуки (дети детей) одинаковые и метод at возвращает одно ии тоже (вычисляемое) значение.
тип — один, но внуки могут ссылаться только на часть данных от предка. (на самом деле это дерево, и дети ссылаются на поддеревья)
C>Сделать две отдельных реализации myclass для родителя и для детей. (Шаблон проектирования p-impl.)
да, вариант.
в конструкторе проверять, соответствует ли переданный указатель нулевому элементу вектора? — если нет — значит дите...
какие еще варианты?
т.е. что-то типа этого:
struct myclass {
using element_type = int;
using storage_type = vector<element_type>;
struct base {
virtual shared_ptr<storage_type> get_storage() = 0; // используется для создания детей
};
struct parent: base {};
struct child: base {};
myclass(...) // конструктор родителя
:pimpl{new parent(...)}
{}
private:
myclass(shared_ptr<storage_type> storage, const element_type *p, size_t size) // конструктор дитя
:pimpl{new child(storage, p, size)}
{}
private:
base *pimpl;
};
(пока не компилил)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)