Дизайн кэша: легкий вес изменяемых объектов-сущностей на основе неизменяемого ключа - PullRequest
0 голосов
/ 11 июля 2009

Множество разных экранов в моем приложении снова и снова ссылаются на одну и ту же сущность / бизнес-объекты.
В настоящее время каждый экран ссылается на собственную копию каждого объекта.
Кроме того, объекты-сущности могут сами предоставлять доступ к другим объектам-сущностям, снова создаются новые копии объектов.
Я пытаюсь найти решение для кеширования.

Я ищу что-то похожее на boost :: flyweight.
Тем не менее, на основе неизменяемого ключа / изменяемого значения и подсчета ссылок.

boost::flyweight<key_value<long, SomeObject>, tag<SomeObject> > object;

Выше почти идеально. Я ищу похожий контейнер, который даст изменчивый доступ к SomeObject

Edit: Мне нравится синтаксис и семантика flyweight. Тем не менее, flyweight разрешает только const SomeObject и доступ, без шансов изменить объект.

Edit2: код должен компилироваться в MSVC ++ 6

Есть идеи?

Ответы [ 2 ]

1 голос
/ 15 июля 2009

Пока вы счастливы, влияя на внутреннее состояние, из внутренних элементов в boost / flyweight / key_value.hpp похоже, что вы можете обойтись const_cast. Если у вас есть собственный экстрактор ключей, вы должны убедиться, что он не меняется в зависимости от операций, которые делает изменяемым x.

flyweight<key_value<long, SomeObject> > kvfw(2);
SomeObject &x = const_cast<SomeObject &>(static_cast<const SomeObject&>(kvfw));
0 голосов
/ 16 июля 2009

Я думаю, что если вы сделаете мухи изменчивыми, то их нельзя будет по закону назвать мухами. Представьте себе ситуацию, когда глифы представлены в виде маховиков. Что произойдет, если одна функция изменит кодовую точку глифа, представляющего букву «А»? Другая функция, которая отображает глифы на экране, попытается нарисовать «A», и пользователь может в конечном итоге увидеть «B» или что-то еще! Я думаю, что вам нужны неизменяемые ключи, относящиеся к изменяемым объектам. Затем подумайте об использовании хеш-таблицы в сочетании с некоторым механизмом подсчета ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...