Как использовать повышение сериализации для двоичного вывода? - PullRequest
0 голосов
/ 30 января 2019

В чем разница между функциями boost :: serialization :: binary_object (void * t, size_t size) и boost :: serialization :: make_binary_object (void * t, size_t size)?

Как я могу использоватьих для получения фактического выходного двоичного файла?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Добро пожаловать в SO !!

Вот пример, показывающий, как его использовать.

#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/binary_object.hpp>
#include <boost/serialization/serialization.hpp>
#include <iostream>
#include <sstream>

using boost::serialization::make_binary_object;

enum class Example : uint8_t {
    A = 1,
    B = 2,
};

int main() {

    std::stringstream stream;
    boost::archive::binary_oarchive ar(stream, boost::archive::no_header);

    auto data = Example::A;
    ar << make_binary_object(&data, sizeof(data));

    std::cout << "Size: " << stream.str().size() << "\n";
}

Если вы хотите сохранить двоичный объект в файл, вот пример, которыйсохранит его в файле с именем data.dat

#include <fstream>

using boost::serialization::make_binary_object;

enum class Example : uint8_t {
    A = 1,
    B = 2,
};

int main() {

    std::ofstream f("data.dat", std::ofstream::binary);
    boost::archive::binary_oarchive ar(f, boost::archive::no_header);

    auto data = Example::A;
    ar << make_binary_object(&data, sizeof(data));  
}

После запуска кода файл будет выглядеть примерно так
data.dat file

Из ускорениякомментарии к исходному коду, опубликованные @ StoryTeller
make_binary_object (), является лишь небольшим помощником для поддержки соглашения о том, что все упаковщики сериализации следуют соглашению об именах make_xxxxx

0 голосов
/ 30 января 2019

boost::serialization::make_binary_object(void * t, size_t size) является помощником и вызывает boost::serialization::binary_object(void * t, size_t size).Предусмотрен помощник для сохранения соглашения об именах make_xxxxx

Чтобы сохранить объект в двоичном файле, вам необходимо создать архив и вызвать void save(Archive & ar, const unsigned int /* file_version */) метод вашего binary_object

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...