我想知道为什么std::raw_storage_iterator
没有伴随std::make_raw_storage_iterator
std::move_iterator
和std::make_move_iterator
的{{1}}。 std::raw_storage_iterator
类模板有两个模板参数。所以我认为提供std::raw_storage_iterator
的make函数比std::move_iterator
更有用,getView()
只有一个模板参数可供指定。
答案 0 :(得分:2)
使用@dyps建议,确实可以实现合理的实施:
template <typename OutputIt>
auto make_raw_storage_iterator( OutputIt out ) {
return std::raw_storage_iterator<OutputIt, std::remove_pointer_t<decltype(&*out)>>(out);
}
(Demo与cppreference的例子)
这保证自§20.7.10/ 1起作用,它对raw_storage_iterator
的模板参数施加了要求,强制要求:
的指针
OutputIterator
需要让operator*
返回一个对象 定义operator&
并返回指向T
[..]
其中T
是第二个参数,输出范围的值类型。因此,给定底层输出迭代器,我们有足够的信息来确定raw_storage_iterator
的预期特化。
没有提出这个问题的原因当然不过是疏忽 - 考虑在C ++ 14之前没有提供make_reverse_iterator
甚至make_unique
。随意迈出第一步。