Re[10]: Класс для сериализации CSerializeBase
От: Аноним  
Дата: 08.07.05 13:44
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, <Аноним>, Вы писали:


E>>>Вообще-то говоря, это скорее отталкивает от желания использовать CSerializableBase. Мало того, что карту атрибутов прописывать нужно, так еще и адаптеры к контейнерам делать.

А>>Мало того что карту атрибутов описывать надо ???!!!
А>>Дорогой мой, но попилуйте, а как же без этого ?????!

Вы пишете:
E>Так ведь я против карты атрибутов и не возражаю.
А потом говорите:
>Просто говорю, что написание карты атрибутов вручную (точно как и отдельное описание на DDL) -- это уже лишняя работа, череватая, к тому же ошибками, как практика показала. Мне не навится, что в дополнение к ней еще что-то нужно делать.

Таки я вас непонял...что вы хотели сказать ? Вы за или Вы против ?
Если вы всётаки против то

Если не описывать каким-нибудь образом состав атрибутов — то будет как минимум неочень гибкое решение. (если оно вообще возможно нормальными способами). Например, если я нехочу сериализовывать непременно все члены класса, а только те которые кончаются на букву "w"?!

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


А>>Согласитесь, уже после прочтения этой фразу ну как-то неинтересно становится — какой-то свой язык...


E>Не соглашусь

E>Язык позволяет делать описания, которые на макросах сделать или очень тяжело, или невозможно. Например, опциональные атрибуты или расширения объектов.

E>А как на счет множественного наследования. И виртуального наследования?

Вероятно вы намекаете на проблемы, которые могут появится из-за одного общего базового класса. (поправьте меня если я неправильно Вас понял). Имеет место быть.
Можно функционал CSerializeBase реализовать статическими функциями. Функции
    int SerializeT(ISerialize* pObject, CSerializedDownContainer* pObjectToSerialize);
    int UnSerializeT(ISerialize* pObject, CSerializedUpContainer* pObjectToSerialize);

сделать шаблонными — вместо интерфейса ISerialize шаблонный тип, который обязательно должен иметь соответствующие функции.
Тогда наследоваться будет ненадо.
Если мы захотим получать колбеки
    virtual void OnPreSerialize(){}
    virtual void OnEndSerialize(){}
    virtual void OnPreUnSerialize(){}
    virtual void OnEndUnSerialize(){}

нужно будет точно так же их реализовать в своём классе и получать или через абстрактный интерфейс или как шаблонные вызовы.


Я понимаю Евгений, вы проделали колосальную работу в ObjESSty. Но я не ставил себе тех задач которые видимо стояли у вас.(никаких опциональных атрибутов и расширеинй объектов не требуется).А если они потребуются, они будут сделанны уровнем абстракции уже чуть ниже, обарачивая функционал библиотеки о которой мы говорим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.