Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Нативная сериализация объектов КОП (число прочтений - 14682 )
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Нативная сериализация объектов КОП
Ответ #15 - 29. Мая 2008 :: 10:34
Печать  
Соответствующие тесты уже есть в репозитарии - конфа юнит-тестирования, ООП
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Нативная сериализация объектов КОП
Ответ #16 - 29. Мая 2008 :: 10:36
Печать  
artbear

artbear писал(а) 29. Мая 2008 :: 10:27:
1. Лады, я больше не буду Улыбка

ОК.

Значит, смотри, Артур, какая ситуация.
Весь код, который был, был написан корректно.
Кроме ; - здесь да, спасибо.

Исправлено.

Теперь такое дело

1.
Код, который ты предлагал для изменения метода Add - нерабочий (а также "!" там не нужен).
Для разных классов и разных названий объектов нужны разные префиксы.

2. Для отмены конструирования выписываю тебе лицензию на модификацию кода создания объекта Улыбка
Но Артур, только на это, не ломай остальную логику, лучше еще раз обсудим, если надо.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Нативная сериализация объектов КОП
Ответ #17 - 29. Мая 2008 :: 10:41
Печать  
kms писал(а) 29. Мая 2008 :: 10:36:
1.
Код, который ты предлагал для изменения метода Add - нерабочий (а также "!" не там не нужен).
Для разных классов и разных названий объектов нужны разные префиксы.

Да, согласен, я вспомнил, что этот код я вставлял вначале, когда тестил только один класс, а для работы с сериализацией нескольких классов пришлось уже юзать разные префиксы, я стал использовать имя КОП-а
типа так
Код
Выбрать все
try
{
	CSerializeToString::Add(m_NameOfInstance, GetOwner()->GetRuntimeClass()->m_lpszClassName, m_NameOfInstance);
}
catch (CSerializeToString::s_exception e) // может быть после сброса оптимизации для классов
{
}
 


  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Нативная сериализация объектов КОП
Ответ #18 - 29. Мая 2008 :: 10:43
Печать  
Во, зашибись.
Тогда, я так понимаю, мы практически у цели. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Нативная сериализация объектов КОП
Ответ #19 - 29. Мая 2008 :: 10:47
Печать  
Может быть, сделать явный метод добавления для КОП-ов типа
Код
Выбрать все
void CSerializeToString::Add(IUserClassContext* pCont)
{
Add(pCont->GetTypeString(), pCont->GetRuntimeClass(), pCont->GetTypeString());
}
 

а?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Нативная сериализация объектов КОП
Ответ #20 - 29. Мая 2008 :: 10:50
Печать  
kms писал(а) 29. Мая 2008 :: 10:36:
2. Для отмены конструирования выписываю тебе лицензию на модификацию кода создания объекта Улыбка
Но Артур, только на это, не ломай остальную логику, лучше еще раз обсудим, если надо.

Залил.
Сборку выложишь?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Нативная сериализация объектов КОП
Ответ #21 - 29. Мая 2008 :: 11:00
Печать  
В доке для icpp также сделал изменения.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Нативная сериализация объектов КОП
Ответ #22 - 29. Мая 2008 :: 11:51
Печать  
Хехе, это типа ответ на http://www.1cpp.ru/forum/YaBB.pl?num=1212044576/24#24

Цитата:
artbear писал(а) 29. Мая 2008 :: 10:47:
Может быть, сделать явный метод добавления для КОП-ов типа
Код
Выбрать все
void CSerializeToString::Add(IUserClassContext* pCont)
{
Add(pCont->GetTypeString(), pCont->GetRuntimeClass(), pCont->GetTypeString());
}
 

а?

Да можно, сделаю.
Только не IUserClassContext, а чистый CBLContext, пожалуй.

Хотя здесь проблема.
pCont->GetTypeString() может возвращать разное значение при изменении языка по умолчанию в системе.

Начнет сериализовываться по-другому.
Перестанет десериализовываться, что еще хуже.

Нет, видимо, не стоит этого делать.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Нативная сериализация объектов КОП
Ответ #23 - 29. Мая 2008 :: 12:01
Печать  
Блин, опять вместо цитаты отредактировал.
Сейчас из буфера восстановлю, что было.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Нативная сериализация объектов КОП
Ответ #24 - 29. Мая 2008 :: 12:01
Печать  
Цитата:
Процитировано сообщение: artbear от Сегодня :: 14:47:56:
Может быть, сделать явный метод добавления для КОП-ов типа
Код
Выбрать все
void CSerializeToString::Add(IUserClassContext* pCont)
{
Add(pCont->GetTypeString(), pCont->GetRuntimeClass(), pCont->GetTypeString());
}
 



а?

Да можно, сделаю.
Только не IUserClassContext, а чистый CBLContext, пожалуй.

Цитата:
Процитировано сообщение: artbear от Сегодня :: 14:50:56:

Сборку выложишь?


Нет.

---

Артур, а вот здесь - ты не находишь, что это не здорово:
Код
Выбрать все
IUserClassContext() : CBLContext(1) {};
 


Интерфейс по определению не содержит реализации.
Ну, это так, просто как информация к размышлению.

Код
Выбрать все
CComponentClass::SetFlagCreateWithoutConstructor();
CComponentClass::GuardOfClearFlagCreateWithoutConstructor guard;
 


Не нравицца.
Может, стоит инкапсулировать оба действия в одном объекте?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Нативная сериализация объектов КОП
Ответ #25 - 29. Мая 2008 :: 12:03
Печать  
kms писал(а) 29. Мая 2008 :: 11:51:
Только не IUserClassContext, а чистый CBLContext, пожалуй.

Да, так проще. Только обозвать нужно как-то поприличнее, для обозначения разницы назначения Улыбка

kms писал(а) 29. Мая 2008 :: 11:51:
Артур, а вот здесь - ты не находишь, что это не здорово:
Код
Выбрать все
IUserClassContext() : CBLContext(1) {};
 


Интерфейс по определению не содержит реализации.
Ну, это так, просто как информация к размышлению.

Не придумал способа, как через в иерархии CComponentClass : IUserClassContext : CBLContext
при вызове конструктора CComponentClass вызвать конструктор CBLContext напрямую Печаль
Поэтому сделал только protected конструктор IUserClassContext - только для наследников!

kms писал(а) 29. Мая 2008 :: 11:51:
Код
Выбрать все
CComponentClass::SetFlagCreateWithoutConstructor();
CComponentClass::GuardOfClearFlagCreateWithoutConstructor guard;
 


Не нравицца.
Может, стоит инкапсулировать оба действия в одном объекте?

Самому не нравится Улыбка
Еще размышляю.

Сейчас сборку выложу.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Нативная сериализация объектов КОП
Ответ #26 - 29. Мая 2008 :: 12:04
Печать  
kms писал(а) 29. Мая 2008 :: 11:51:
Цитата:
artbear писал(а) 29. Мая 2008 :: 10:47:
Может быть, сделать явный метод добавления для КОП-ов типа
Код
Выбрать все
void CSerializeToString::Add(IUserClassContext* pCont)
{
Add(pCont->GetTypeString(), pCont->GetRuntimeClass(), pCont->GetTypeString());
}
 

а?

Да можно, сделаю.
Только не IUserClassContext, а чистый CBLContext, пожалуй.

Хотя здесь проблема.
pCont->GetTypeString() может возвращать разное значение при изменении языка по умолчанию в системе.

Начнет сериализовываться по-другому.
Перестанет десериализовываться, что еще хуже.

Нет, видимо, не стоит этого делать.

Логично Печаль
Тогда оставляем только IUserClassContext - там всегда наименование класса.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Нативная сериализация объектов КОП
Ответ #27 - 29. Мая 2008 :: 12:09
Печать  
Выложил новую сборку icpp с сериализацией.
Качайте, тестируйте.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Нативная сериализация объектов КОП
Ответ #28 - 29. Мая 2008 :: 12:12
Печать  
artbear писал(а) 29. Мая 2008 :: 12:04:
Логично Печаль
Тогда оставляем только IUserClassContext - там всегда наименование класса.

Ну а смысл тогда - оно и так у тебя один раз встречается.
Я-то хотел упростить подключение остальных классов типа CVTExtended...

Ну, могу тогда сделать что-то типа
Код
Выбрать все
void CSerializeToString::Add(LPCSTR szPrefix, CBLContext* pCont)
{
Add(szPrefix, pCont->GetRuntimeClass(), pCont->GetTypeString());
}
 


Т.е. префикс фиксирован, остальное - детали реализации.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Нативная сериализация объектов КОП
Ответ #29 - 29. Мая 2008 :: 12:17
Печать  
kms писал(а) 29. Мая 2008 :: 12:12:
artbear писал(а) 29. Мая 2008 :: 12:04:
Логично Печаль
Тогда оставляем только IUserClassContext - там всегда наименование класса.

Ну а смысл тогда - оно и так у тебя один раз встречается.
Я-то хотел упростить подключение остальных классов типа CVTExtended...

Ну, могу тогда сделать что-то типа
Код
Выбрать все
void CSerializeToString::Add(LPCSTR szPrefix, CBLContext* pCont)
{
Add(szPrefix, pCont->GetRuntimeClass(), pCont->GetTypeString());
}
 


Т.е. префикс фиксирован, остальное - детали реализации.

+1 по обоим пунктам

Тогда, плиз, для большей ясности лучше так
Код
Выбрать все
void CSerializeToString::Add(LPCSTR szUniqueKey, CBLContext* pCont);
 


Потому что я, например, при первом просмотре хедера не понял, что все зависит от префикса.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать