Je travaille avec 2 bibliothèques. On prend et retourne std::string
s alors que l'autre utilise std::vector<unsigned char>
s.std :: déplacer entre std :: string et std :: vector <unsigned char>
Ce serait bien si je pouvais voler les tableaux sous-jacents de std::string
et std::vector<unsigned char>
et être en mesure de les déplacer les uns dans les autres sans la copie excessive.
ATM-je utiliser quelque chose comme:
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();
Et dans l'autre sens:
std::string(
reinterpret_cast<const char*>(&vector_value[0]),
vector_value.size());
Il serait beaucoup mieux d'être en mesure de définir un:
std::string move_into(std::vector<unsigned char>&&);
std::vector<unsigned char> move_into(std::string&&);
C++ 11 interdit explicitement la copie sur l'écriture, n'est-ce pas? À moins qu'ils ne le gardent sous le «tant qu'il se comporte comme si nous nous conformions à la loi». Je pense que l'optimisation de petites chaînes a été la voie à suivre pendant un certain temps. –