Приведение объекта в char * для сохранения / загрузки - PullRequest
0 голосов
/ 20 февраля 2011

У меня небольшой вопрос.

Я пишу функцию загрузки / сохранения для получения данных простой геометрии из сохраненного файла.Используемые объекты создаются из классов с большим количеством данных, но все они используют просто старые данные, без указателей / выделенной памяти и т. П.

Возможно ли загрузить файл в выделенныймассив char *, приведите его, скажем, к Geometry *, и спокойно ожидайте, что все не будет зашифровано, при условии, что я сделал то же самое при сохранении (приведение массива к типу char * и запись в файл)?

Если я пытаюсь получить доступ к массиву, когда на него указывает указатель char *, или int *, или любой другой тип указателя, есть ли какие-то особые соображения, которые мне нужно принять?

Ответы [ 3 ]

2 голосов
/ 20 февраля 2011

Можно ли загрузить файл в выделенный массив char *, например, с геометрией *

Это возможно.Я сделал похожую работу.Для этого я использовал две цепочки static_cast:

char *buffer;
//..
Geometry *g = static_cast<Geometry *>(static_cast<void*>(buffer));

//reverse
buffer = static_cast<char*>(static_cast<void*>(g));

Поскольку две цепочки static_cast выглядят громоздкими, я написал такой шаблон функции:

template<class To, class From>
To any_cast(From v)
{
    return static_cast<To>(static_cast<void*>(v));
}

Затем использовал его как

Geometry *g = any_cast<Geometry *>(buffer);

//reverse
buffer = any_cast<char*>(g);

См. Эту тему:

Почему у нас есть reinterpret_cast в C ++, когда два сцепленных static_cast могут выполнять свою работу?

0 голосов
/ 20 февраля 2011

Рассмотрите возможность использования библиотеки для сериализации, такой как protobuf

0 голосов
/ 20 февраля 2011

Вы можете записать массив объектов POD (которые не содержат указателей) в виде байтов, а затем прочитать их обратно. Предлагаемые вами приведения будут делать это;вам нужно использовать char*, а не int*, чтобы избежать проблем с анализом псевдонимов на основе типов.Однако вам нужно будет прочитать их в системе с тем же размером слова, порядком байтов и структурой, что и на машине, на которой они были записаны.

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