Как преобразовать std :: vector <unsigned char> в vector <char> без копирования?

Я не смог найти этот вопрос, и это актуальная проблема, с которой я сталкиваюсь.

У меня есть утилита загрузки файлов, которая возвращаетstd::vector<unsigned char> содержащий все содержимое файла. Однако функция обработки требует массива смежныхchar (и этоне можешь быть изменено - это функция библиотеки). Так как класс, использующий функцию обработки, в любом случае сохраняет копию данных, я хочу сохранить ее какvector<char>, Вот код, который может быть немного более иллюстративным.

std::vector<unsigned char> LoadFile (std::string const& path);

class Processor {
    std::vector<char> cache;
    void _dataOperation(std::vector<char> const& data);

public:
    void Process() {
        if (cache.empty())
            // here's the problem!
            cache = LoadFile("file.txt");

        _dataOperation(cache);
    }
};

Этот код не компилируется, потому что (очевидно) нет подходящего преобразования. Однако мы можем быть уверены, что временный вектор будет занимать такой же объем памяти (IOWsizeof(char) == sizeof(unsigned char))

Наивным решением было бы перебрать содержимое временного и разыграть каждого персонажа. Я знаю, что в нормальном случаеoperator= (T&&) будет называться.

В моей ситуации безопасно переосмысливать преобразование, потому что я уверен, что буду читать только символы ASCII. Любой другой персонаж будет пойман в_dataOperation так или иначе.

Итак, мой вопрос:Как правильно и безопасно преобразовать временный вектор так, чтобы не было копирования?

Если это невозможно, я бы предпочел безопасный способ копирования, а не небезопасное копирование. Я также мог бы изменитьLoadFile вернуть либоvector<char> или жеvector<unsigned char>.

Ответы на вопрос(1)

Ваш ответ на вопрос