【发布时间】:2021-11-16 11:04:47
【问题描述】:
我希望能够将我的自定义容器传递给这个 std::span 构造函数:
template< class R >
explicit(extent != std::dynamic_extent)
constexpr span( R&& range );
我需要向我的自定义类添加什么以使其满足能够将其传递给接收范围的std::span 构造函数的要求?
例如,使用std::vector,我们可以这样做:
std::vector<int> v = {1, 2, 3};
auto span = std::span{v};
我已经将这些添加到我的自定义类中:
Type* begin()
{
return m_Data;
}
Type* end()
{
return m_Data + m_Length;
}
const Type* data() const
{
return m_Data;
}
size_t size() const
{
return m_Length;
}
...这反过来又允许我使用基于范围的循环,以及std::data(my_container) 和std::size(my_container)。我错过了什么,以便我也可以将我的容器传递给 std::span 构造函数?是否需要实现更复杂的迭代器?
【问题讨论】:
-
请提供minimal reproducible example,其中包括您的整个类型。有问题的 span 构造函数也列出了它的约束。你检查了吗?
-
我确实看过约束,但我对理解它们感到困惑。
标签: c++ c++20 std-ranges std-span