Как преобразовать std :: vector <unsigned char> в vector <char> без копирования?
Я не былне могу найти этот вопрос, и этоэто настоящая проблема, ям лицом.
У меня есть утилита загрузки файлов, которая возвращаетstd::vector
содержащий все содержимое файла. Однако функция обработки требует массива смежныхchar
(и этоне могу быть изменено - этофункция библиотеки). Так как класс, которыйс помощью функции обработки сохраняет копию данных в любом случае, я хочу сохранить ее какvector
, Вот'код, который может быть немного более иллюстративным.
std::vector LoadFile (std::string const& path);
class Processor {
std::vector cache;
void _dataOperation(std::vector const& data);
public:
void Process() {
if (cache.empty())
// here's the problem!
cache = LoadFile("file.txt");
_dataOperation(cache);
}
};
Этот код некомпилировать, потому что (очевидно)Нет подходящего преобразования. Однако мы можем быть уверены, что временный вектор будет занимать такой же объем памяти (IOW)sizeof(char) == sizeof(unsigned char)
Наивным решением было бы перебрать содержимое временного и разыграть каждого персонажа. Я знаю, что в нормальном случаеoperator= (T&&)
будет называться.
В моей ситуации этобезопасно переосмысливать преобразование, потому что я уверен, что буду читать только символы ASCII. Любой другой персонаж будет пойман в_dataOperation
тем не мение.
Итак, мой вопрос:Как правильно и безопасно преобразовать временный вектор так, чтобы не было копирования?
Если это не такВозможно, я бы предпочел безопасный способ копирования, а не небезопасное копирование. Я также мог бы изменитьLoadFile
вернуть либоvector
или же .vector