ranges-v3 访问游标内部
ranges-v3 access cursor internals
在 c++ range-v3 库中。
是否可以访问游标(来自 view_facade)的内部数据?
class range_t : public ranges::view_facade<range_t>
{
friend ranges::range_access;
struct cursor {
cursor() = default;
cursor(FlatMultiMap& self, std::size_t index)
: self(&self)
, index(index)
{}
// other implementation stuff
private:
// I want to get this data from outside cursor class
FlatMultiMap* self;
std::size_t index;
};
cursor begin_cursor() const
{
return { *self, index };
}
cursor end_cursor() const
{
return { *self, end_index };
}
FlatMultiMap* self;
std::size_t index;
std::size_t end_index;
public:
range_t() = default;
range_t(FlatMultiMap& self, std::size_t index, std::size_t end_index)
: self(&self)
, index(index)
, end_index(end_index)
{}
template<class I, class S>
range_t(I iterator, S sentinel)
{
// how to do this?
iterator.self // Error
}
};
如果没有 - range-v3 是否提供类似 https://www.boost.org/doc/libs/1_68_0/libs/iterator/doc/iterator_facade.html 的内容?
要access/expose游标内部数据,需要用到游标的mixin。
现在 https://ericniebler.github.io/range-v3/ 在 "Create Custom Iterators" 部分记录。
在 c++ range-v3 库中。
是否可以访问游标(来自 view_facade)的内部数据?
class range_t : public ranges::view_facade<range_t>
{
friend ranges::range_access;
struct cursor {
cursor() = default;
cursor(FlatMultiMap& self, std::size_t index)
: self(&self)
, index(index)
{}
// other implementation stuff
private:
// I want to get this data from outside cursor class
FlatMultiMap* self;
std::size_t index;
};
cursor begin_cursor() const
{
return { *self, index };
}
cursor end_cursor() const
{
return { *self, end_index };
}
FlatMultiMap* self;
std::size_t index;
std::size_t end_index;
public:
range_t() = default;
range_t(FlatMultiMap& self, std::size_t index, std::size_t end_index)
: self(&self)
, index(index)
, end_index(end_index)
{}
template<class I, class S>
range_t(I iterator, S sentinel)
{
// how to do this?
iterator.self // Error
}
};
如果没有 - range-v3 是否提供类似 https://www.boost.org/doc/libs/1_68_0/libs/iterator/doc/iterator_facade.html 的内容?
要access/expose游标内部数据,需要用到游标的mixin。
现在 https://ericniebler.github.io/range-v3/ 在 "Create Custom Iterators" 部分记录。