Действительно ли возможно автоматически преобразовать в последовательную форму C ++ объект?

Действительно ли там что-то подобно преобразованию в последовательную форму ЯВЫ/.NET для C ++?

9
задан joemoe 24 January 2010 в 05:22
поделиться

4 ответа

Написать следующий метод в классе приложений Global.Asax

protected void Application_BeginRequest(Object sender, EventArgs e)
{
   HttpContext.Current.User = HttpContext.Session["CurrentUser"];
}

или вы можете использовать свойство «Пользователь» System.Web.mvc.Controller, который унаследован для ваших контроллеров (Примечание: Обязательно позвоните в Formatauthentication.SetauthCookie методом при успешном подтверждении входа пользователя).

-121--3853866-

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

12
ответ дан 4 December 2019 в 07:35
поделиться

К сожалению, нет автоматического сериализации объектов в C ++. То есть потому, что любой механизм сериализации должен иметь возможность «понять» ваш пользовательский объект во время выполнения, а C ++ не содержит необходимую информацию для этого. Java и .NET на другой стороне есть, что называется, отражение. Этот механизм позволяет всем просматривать структуру данных любого произвольного объекта во время выполнения.

Все это не означает, что нет возможности сериализовать объект C ++ с относительно небольшим усилием. Возьмите, например, стандартную библиотеку потоков C ++. Написав

int x = 2010;
cout << x << endl;

вы фактически сериализуете объект типа Int. Можно продлить этот механизм для поддержки вашего пользовательского класса. Это делается просто путем перегрузки оператора <<. Это не так хоросно, как Java сериализация, но это тоже очень удобно.

Есть также некоторые библиотеки, которые делают его еще проще. Как кто-то уже упоминал, Boost Buillization Bibreation делает хорошую работу. Работа с повышением сериализации выглядит очень похоже на работу с ioStream, но решает некоторые проблемы, присущие стандартным потокам.

7
ответ дан 4 December 2019 в 07:35
поделиться

Boost.Serialization - очень хорошая библиотека, она также поддерживает базовую версию - то, что никогда не бывает полностью возможным при автоматической сериализации. Поскольку мне понадобилась еще лучшая версия, я на самом деле написал свою собственную библиотеку сериализации, которая следует стилю Boost.Serialization (потому что автор Boost.Serialization не был заинтересован в ее улучшении).

Обратите внимание, что вы также можете злоупотреблять функциями сериализации для других целей, таких как GUI или генерация веб-форм, если добавлено немного справочных данных (смотрите, как Boost.Serialization делает XML).

Следует отметить, что популярный метод сохранения целых структур (путем приведения их к char* и записи sizeof(struct) байт) является совершенно непредсказуемым, он не поддерживает версионирование и ломается, если структура содержит какие-либо указатели или объекты C++ (не-POD).

3
ответ дан 4 December 2019 в 07:35
поделиться

Буфет протокола протокола Google обеспечивает реализацию C ++ в основном пакете; В качестве хорошей выгоды вы можете поделиться этими данными с множеством других языков - но вы будете ограничены использованием типов , а не ваши собственные (какие двигатели сериализации в других Языки Поддержка).

На самом деле это не проблема, как (при необходимости) вы можете просто относиться к сгенерированным типам в качестве DTO, что Twin к вашему актуальному объектам домена.

4
ответ дан 4 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: