为什么没有std::make_raw_storage_iterator

Why there is no std::make_raw_storage_iterator?

本文关键字:raw storage iterator make std 为什么      更新时间:2023-10-16

我想知道为什么std::raw_storage_iterator没有像std::move_iteratorstd::make_move_iterator那样的附带std::make_raw_storage_iteratorstd::raw_storage_iterator类模板有两个模板参数。因此,我认为实际上为std::raw_storage_iterator提供一个make函数比为std::move_iterator提供一个只需指定一个模板参数的make函数更有用。

有了@dyps的建议,一个合理的实现确实是可能的:

template <typename OutputIt>
auto make_raw_storage_iterator( OutputIt out ) {
    return std::raw_storage_iterator<OutputIt, std::remove_pointer_t<decltype(&*out)>>(out);
}

(演示和cppreference的示例(
由于§20.7.10/1对raw_storage_iterator的模板参数提出了要求,要求

OutputIterator需要使其operator*为定义了哪个CCD_ 11并返回指向CCD_ 12[..]的指针

其中T是第二个参数,即输出范围的值类型。因此,给定底层输出迭代器,我们有足够的信息来确定raw_storage_iterator的预期专门化。

没有提出这一点的原因肯定不仅仅是疏忽——考虑到make_reverse_iterator甚至make_unique在C++14之前也没有提供。请随意迈出第一步。