![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
есть библиотека сериализации
в ней класс может быть сериализуем, если в нем есть метод serialize, который сериализует все поля класса или тип класса "простой". "простым" тип считается если он арифметический, или если он наследуется от класса struct make_simple {/*empty*/}; или если для него специализирован шаблонный класс is_simple. для сериализации простых типов используется memcpy хотя классы, имеющие базовый класс, не считаются POD, классы вида struct LoginFail : serialization::make_simple {...}; сериализуются нормально (конечно "неопределенное поведение", но удобно, т.к. работает) я попробовал написать
и получил что sizeof( LoginFail ) != 1 т.е. при наследовании от 2х пустых классов, тип уже не POD я хотел бы в дальнейшем избежать этой ошибки, но проверка типов помеченных make_simple на то что они POD бесполезна, т.к. они по определению не POD // всегда failed BOOST_MPL_ASSERT(( boost::mpl::if_< boost::is_base_of<make_simple,T>, boost::is_pod<T>, boost::mpl::true_ > )); можно ли как-то сделать проверку на то, можно ли копировать тип memcpy? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
в суть пока не вникал, но на первый взгляд мне кажется тут подойдет решение сделать шаблон пакета "сквозным" :
Это сообщение отредактировал(а) mes - 19.9.2009, 23:22 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
действительно если избавиться от множественного наследования, лишние байты уберутся и sizeof будет как у POD
а проверку этой ошибки можно как нибудь сделать? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
компиляторо-зависимый способ: сравнить размер указателя на метод нужного класса.
другого не знаю. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |