Re: общий ресурс
От: Chorkov Россия  
Дата: 19.12.19 07:37
Оценка: 15 (1) +1
Здравствуйте, 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.)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.