Я работаю с 2 библиотеками. Один берет и возвращает std::string
s, а другой использует std::vector<unsigned char>
s.std :: перемещение между std :: string и std :: vector <unsigned char>
Было бы хорошо, если бы я мог украсть базовые массивы от std::string
и std::vector<unsigned char>
и иметь возможность перемещать их друг в друга без чрезмерного копирования.
ATM Я использую что-то вроде:
const unsigned char* raw_memory =
reinterpret_cast<const unsigned char*>(string_value.c_str()),
std::vector<unsigned char>(raw_memory, raw_memory + string_value.size();
И другой путь:
std::string(
reinterpret_cast<const char*>(&vector_value[0]),
vector_value.size());
Было бы гораздо лучше, чтобы быть в состоянии определить:
std::string move_into(std::vector<unsigned char>&&);
std::vector<unsigned char> move_into(std::string&&);
C++ 11 явно запрещает копирование при записи, не так ли? Если они не держат его под «до тех пор, пока он ведет себя так, как если бы мы соблюдали закон спецификации». Я думаю, что небольшая оптимизация строк - это то, что нужно сделать некоторое время. –