У меня есть код C, который я хочу инкапсулировать на C++, чтобы упростить его использование.Преобразование C uint8_t указатель + комбинация размеров с итераторами C++
В коде C используется пара uint8_t*
/size_t
для ссылки на кусочек памяти. Могу ли я преобразовать их в итераторы C++ с чем-то вроде std::begin
/std::end
? Я знаю, что эти функции не принимают указатели, но, возможно, есть и другой способ. Я хочу избежать копирования любых данных.
Что я ищу что-то вроде этого:
void fn(uint8_t* ptr, size_t size) {
auto begin = std::begin(...);
auto end = std::end(...);
// continue to use begin/end similar to std::vector<uint8_t>::iterator
}
Итераторов должны быть доступны со стандартной библиотекой. В частности, я хочу использовать его с std::copy
и конструктором std::vector
, который принимает итераторы. Я знаю, что у меня есть другие возможности для копирования памяти, но я ищу инкапсуляцию в типах C++.
Я также пробовал это, но, видимо, это частный конструктор. (Делает полный смысл для меня, что я не могу построить вектор итератор, но я просто пытаюсь вещи.)
std::vector<uint8_t>::iterator begin(ptr);
Я также предпочитаю, чтобы избежать необходимости реализовывать свои собственные типы итераторов.
Это то, что итераторы C++ (98) были предназначены для использования с использованием пары указателей. – dascandy
Действительно ли они (конвертируемые в) итераторы C++? Я хочу передать их в библиотечные функции std, которые принимают только итераторы. – molf
Функции библиотеки std разработаны с учетом этого, так что все алгоритмы могут использоваться вместе с массивами c-стиля тоже – sp2danny