Здравствуйте, 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. Но я не ставил себе тех задач которые видимо стояли у вас.(никаких опциональных атрибутов и расширеинй объектов не требуется).А если они потребуются, они будут сделанны уровнем абстракции уже чуть ниже, обарачивая функционал библиотеки о которой мы говорим.