Лучший способ хранить большие объемы данных разных типов? - PullRequest
1 голос
/ 25 сентября 2011

Я хочу сохранить буфер data. Мне нужно будет добавить данные в data в виде байтов, слов и слов. Каков наилучший способ реализации data? Есть ли что-то в STL для этого?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2011

Если вы хотите создать непрерывный буфер полностью неструктурированных данных, рассмотрите возможность использования std::vector<char>:

// Add an item to the end of the buffer, ignoring endian issues
template<class T>
addToVector(std::vector<char>& v, T t)
{
  v.insert(v.end(), reinterpret_cast<char*>(&t), reinterpret_cast<char*>(&t+1));
}

// Add an item to end of the buffer, with consistent endianness
template<class T>
addToVectorEndian(std::vector<char>&v, T t)
{
  for(int i = 0; i < sizeof(T); ++i) {
    v.push_back(t);
    t >>= 8; // Or, better: CHAR_BIT
  }
}
0 голосов
/ 25 сентября 2011

Из того, что вы сказали, звучит так, будто вы хотите иметь разные типы в контейнере STL. Есть два способа сделать это:

  1. Иметь иерархию объектов и хранить ссылку / указатель на них (т.е. std::vector< boost::shared_ptr<MyBaseObject> >
  2. Использовать boost :: option (т.е. std::vector< boost::variant<BYTE, WORD, DWORD> >)

Если, однако, вам необходимо установить интерфейс с каким-либо устаревшим кодом C или отправить необработанные данные по сети, это может быть не лучшим решением.

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