Здравствуйте, niXman, Вы писали:
X>привет!
X>есть класс, мембером которого является vector<type>.
X>этот класс может создавать обекты своего же типа, которые содержат только часть данных из "родительского":
X>X>struct myclass {
X> using element_type = int;
X> myclass at(size_t index) {
X> element_type *p = ... // находим элемент по индексу
X> size_t size = ... // определяем размер
X> return {p, size};
X> }
X>private:
X> myclasss(const element_type *p, size_t size)
X> { m_ints.assign(p, size); }
X> vector<element_type> m_ints;
X>};
X>
X>(код сильно упрощен, и в векторе не int`ы)
X>проблема тут в том, что данные в "родительском" классе иммутабельны, но дети все равно вынуждены копировать их. от этого и хочется избавиться.
X>как вариант: вектор можно хранить в shared_ptr, и тогда все дети могут ссылаться на него.
X>одно не нравится в этом варианте: нужны дополнительные мемберы, которые будут использоваться только детьми — значит код класса придется дополнить кучей условий проверки, дите или родитель %)
X>как быть?
В случае детей, если я правильно понял, все внуки (дети детей) одинаковые и метод at возвращает одно ии тоже (вычисляемое) значение.
Сделать две отдельных реализации myclass для родителя и для детей. (Шаблон проектирования p-impl.)