我想知道为什么 std::raw_storage_iterator
没有像 std::move_iterator
和 一样的
。 std::make_raw_storage_iterator
>std::make_move_iteratorstd::raw_storage_iterator
类模板有两个模板参数。所以我认为为 std::raw_storage_iterator
提供一个 make 函数实际上比 std::move_iterator
更有用,后者只有一个模板参数要指定。
最佳答案
根据@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
is required to have itsoperator*
return an object for whichoperator&
is defined and returns a pointer toT
[..]
其中T
是第二个参数,输出范围的值类型。因此,鉴于底层输出迭代器,我们有足够的信息来确定 raw_storage_iterator
的预期特化。
这个没有被提议的原因肯定只是一个疏忽 - 考虑到 make_reverse_iterator
甚至 make_unique
在 C++14 之前也没有提供。随意迈出第一步。
关于c++ - 为什么没有 std::make_raw_storage_iterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30354113/