Объект Dynami c Constness - PullRequest
       21

Объект Dynami c Constness

0 голосов
/ 07 февраля 2020

У меня сейчас проблема с моим дизайном. Я обрабатываю ситуацию master-server и semi-slave-client. У меня есть сервер, который практически говорит - может делать все, что захочет. (Давайте не разбирать сетевой уровень, так как он уже работает достаточно прилично для моих собственных нужд.)

Я пытаюсь использовать шаблон проектирования Object Pool, и у меня есть базовый объект - давайте назовем его ManagedObject, как это базовый тип объекта. ManagedObject хранит все необходимые данные / информацию, необходимые для запуска приложения. У меня есть своя собственная система, которая синхронизирует состояние хранилища внутри клиента и сервера, поэтому она также работает нормально.

Хорошо, после очень длинного вступления к моей проблеме:

Проблема в том, что мой Server может видеть И может редактировать данные, владельцем которых он является (то же самое для клиента). Я хотел бы, чтобы один тип сохранялся и использовался точно таким же образом, давайте предположим, что этот код:

class ManagedObject
{
private:
    some::other::ManagedObject managedObject;
public:

    explicit ManagedObject(char* buffer);
};

Который в данном случае имеет базовый класс макета, который содержит some::other::ManagedObject. Я лично хотел бы динамически во время выполнения сделать эту переменную постоянной или нет, но я просто знаю, что она не работает так (и не должна).

Я думал о создании унифицированного интерфейса для доступа к это, но это также было бы невозможно, так как интерфейс должен объявить свой тип, поэтому лучше всего я мог получить следующее:

some::other::ManagedObject getMut(); // Yes copy
const some::other::ManagedObject& get();

, что не очень полезно для моего случая, так как это два методы, которые пользователь должен знать, что делать и когда не просто делать тонны копий одного и того же объекта. Кроме того, я должен наблюдать, изменился ли объект, и посылать обновления другим экземплярам.

Моя последняя и текущая попытка состояла в том, чтобы сделать все копии по умолчанию, и создать механизм «транзакции», который в случае commit() Метод просто проверит, возможно ли это (разрешено).

Вот вопрос:

Как я могу разработать свой код, чтобы избежать подхода copy by default, и сделать его лучше / эффективнее как целая система.

Аннотации:

Я знаю, что это преждевременная оптимизация, но я хочу, чтобы эта часть системы работала без сбоев, так как это будет аорта моего игрового проекта .

...