Как записать класс в std::vector
Есть:
class Token {
public:
// DON'T DISTURB THE ORDER!!!
lu dist;
hu length;
BYTE character;
// DON'T DISTURB THE ORDER!!!
};
И указатель на пустой вектор: std::vector<BYTE>* block, где BYTE - unsigned char
Вопрос: Как записать Token в block и обратно
Ответы (1 шт):
Поскольку Token является типом простой структуры данных, то объекты этого класса можно скопировать при помощи memcpy.
std::vector<BYTE>* block; // указывает на существующий вектор
Token token; // существующий объект
// Выделяем достаточно памяти чтобы поместить объект.
block->resize(sizeof(Token));
// Поскольку вектор изначально пустой мы можем писать в его начало.
std::memcpy(&block->at(0), &token, sizeof(Token));
А затем для чтения обратно можно опять использовать memcpy:
Token token2; // в него будет скопирован объект
std::memcpy(&token2, &block->at(0), sizeof(Token));
Пример можно посмотреть тут: http://cpp.sh/5xm7u
Но это решение имеет свои ограничения. Одно из самых больших - данные не переносимые. То есть на системах с другими размерами базовых типов и другим порядком байтов значения не будут теми же.
Если цель - передача данных на другую систему, то стоит использовать системы сериализации. Например, protocol buffers, cereal или просто json.