У меня есть std::vector<double>
и вам нужно работать с библиотекой, которая принимает const vector<uint8_t>
. Я указываю, какой тип данных будет в библиотеке с перечислением.
Есть ли в любом случае, что я могу полностью избежать копирования данных и иметь байтовый вектор внутри, ссылаясь на те же данные, что и двойной вектор? Поскольку вектор байта const и двойной вектор не будет меняться в течение жизни байтового вектора, это выглядит так, как будто это было бы довольно безопасно. Существует много данных, поэтому копирование действительно не является вариантом.
Если ваш "байтовый вектор" на самом деле является вектором байтов, тогда у вас будет шанс, потому что вы можете легально изучить почти что-либо как массив char
. Однако uint32_t
не являются байтами, и они, безусловно, не являются char
. Итак, нет, вы в принципе не можете этого сделать без ужасной хакерской магии, безопасность которой будет полностью зависимой от реализации.
В любом случае, вы не можете сделать это с помощью типов векторов: вам нужно будет передать и передать результат std::vector::data()
, то есть указатель.
Извините, но я должен рекомендовать пересмотреть ваш дизайн. Если библиотека, которую вы используете, действительно принимает вектор целых чисел, который фактически должен быть вектором удвоений, тогда его разработчики поставили вас в неудобное положение.
vector<std::uint32_t>
зачем вам это указывать? Шаблон был бы намного лучше.