为什么没有std :: make_raw_storage_iterator?

时间:2015-05-20 15:30:10

标签: c++ templates

我想知道为什么std::raw_storage_iterator没有伴随std::make_raw_storage_iterator std::move_iteratorstd::make_move_iterator的{​​{1}}。 std::raw_storage_iterator类模板有两个模板参数。所以我认为提供std::raw_storage_iterator的make函数比std::move_iterator更有用,getView()只有一个模板参数可供指定。

1 个答案:

答案 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。随意迈出第一步。