Vin*_*ent 5 c++ file stream reinterpret-cast contiguous
我目前有以下函数来读取数据或原始数据的向量(_readStream
是a std::ifstream
):
template<typename IteratorType>
inline bool MyClass::readRawData(
const IteratorType& first,
const IteratorType& last,
typename std::iterator_traits<IteratorType>::iterator_category* = nullptr
)
{
_readStream.read(reinterpret_cast<char*>(&*first), (last-first)*sizeof(*first));
return _readStream.good();
}
Run Code Online (Sandbox Code Playgroud)
第一个问题:这个功能对你来说好吗?
当我们直接读取内存块,如果从内存块只会工作first
到last
是在内存中连续的.怎么检查?
抛开示例函数不谈,如果不检查两者之间每个元素的地址,您永远无法完全确定迭代器将形成连续的内存。
不过,合理的完整性测试只是检查两者之间的内存区域是否与两者之间的计数相同:
assert(&*last - &*first == last - first &&
"Iterators must represent a contiguous memory region");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1125 次 |
最近记录: |