Вектор двойного вектора байтов

0

У меня есть std::vector<double> и вам нужно работать с библиотекой, которая принимает const vector<uint8_t>. Я указываю, какой тип данных будет в библиотеке с перечислением.

Есть ли в любом случае, что я могу полностью избежать копирования данных и иметь байтовый вектор внутри, ссылаясь на те же данные, что и двойной вектор? Поскольку вектор байта const и двойной вектор не будет меняться в течение жизни байтового вектора, это выглядит так, как будто это было бы довольно безопасно. Существует много данных, поэтому копирование действительно не является вариантом.

  • 1
    Если библиотека принимает только этот точный тип, то нет, вам придется скопировать. Если он принимает параметр шаблона, то у вас есть возможность реализовать оболочку.
  • 0
    «[...] нужно работать с библиотекой, которая принимает константный вектор <uint32_t>. Я указываю, какой тип данных для библиотеки с перечислением.» Если требуется vector<std::uint32_t> зачем вам это указывать? Шаблон был бы намного лучше.
Показать ещё 2 комментария
Теги:
c++11
vector

1 ответ

1

Если ваш "байтовый вектор" на самом деле является вектором байтов, тогда у вас будет шанс, потому что вы можете легально изучить почти что-либо как массив char. Однако uint32_t не являются байтами, и они, безусловно, не являются char. Итак, нет, вы в принципе не можете этого сделать без ужасной хакерской магии, безопасность которой будет полностью зависимой от реализации.

В любом случае, вы не можете сделать это с помощью типов векторов: вам нужно будет передать и передать результат std::vector::data(), то есть указатель.

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

  • 0
    Это тип uint8_t, а не 32. Моя ошибка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню