我找不到那个问题,这是我面临的一个实际问题。
我有一个文件加载实用程序,它返回std::vector<unsigned char>
包含整个文件内容。但是,处理函数需要 contiguos 数组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);
}
};
此代码无法编译,因为(显然)没有适当的转换。但是,我们可以肯定,临时向量将占用相同数量的内存 (IOW sizeof(char) == sizeof(unsigned char)
)
天真的解决方案是迭代临时的内容并转换每个字符。我知道在正常情况下,operator= (T&&)
会被调用。
在我的情况下,重新解释转换是安全的,因为我确信我只会读取 ASCII 字符。_dataOperation
无论如何,任何其他角色都会被抓住。
所以,我的问题是:如何以不涉及复制的方式正确安全地转换临时向量?
如果不可能,我更喜欢安全的复制方式,而不是不安全的非复制方式。我也可以更改LoadFile
为返回vector<char>
或vector<unsigned char>
。