удалить версионность при сериализации boost xml - PullRequest
4 голосов
/ 11 января 2011

Я просто не могу найти способ удалить отслеживание версий из boost xmlarchives.

пример

<Settings class_id="0" tracking_level="0" version="1">
 <px class_id="1" tracking_level="1" version="0" object_id="_0">
  <TestInt>3</TestInt>
  <Resolution class_id="2" tracking_level="0" version="0">
   <x>800</x>
   <y>600</y>
  </Resolution>
  <SomeStuff>0</SomeStuff>
 </px>
</Settings>

Я хочу получить материал class_id = "0" tracking_level = "0" version = "1", потому что в этом случае он мне просто не нужен и мне нужна простая чистая конфигурация, такая как файл

код

void serialize(Archive & ar, const unsigned int version)
{
  ar & make_nvp("TestInt", TestInt);

  ar & make_nvp("Resolution", resolution);
  ar & make_nvp("SomeStuff", SomeStuff);
}

я нашел boost :: serialization :: track_never, но нигде его не использовать

Ответы [ 3 ]

8 голосов
/ 28 ноября 2012

пока слишком поздно для оригинального плаката. Я хотел бы поделиться тем, что нашел

BOOST_CLASS_IMPLEMENTATION(My_class, object_serializable)

делает свое дело.

5 голосов
/ 12 января 2015

Чтобы удалить заголовок файла архива xml, вы можете использовать

boost::archive::xml_iarchive ia(is, boost::archive::no_header);

Чтобы отключить отображение атрибутов class_id, tracking_level и version, вам придется использовать

BOOST_CLASS_IMPLEMENTATION( <type>, boost::serialization::object_serializable )
BOOST_CLASS_TRACKING( <type>, boost::serialization::track_never )

для каждого типа.Эти макросы необходимо вызывать в этом порядке.Примечание: вы не можете использовать

BOOST_CLASS_VERSION

с макросами, описанными выше.

4 голосов
/ 12 января 2011

попробуйте создать архив с параметром no_header:

boost::archive::xml_iarchive ia(is, boost::archive::no_header);
...