我可以使用std :: map :: iterator作为类的基础吗?

时间:2016-11-11 04:17:53

标签: c++ inheritance stl iterator incomplete-type

我需要两种不同类型的值的双射映射。我使用std::map s。真实代码的一部分:

struct endpoint
{
    site l, r;
    pedge e;
};

struct endpoint_less
{
     // comparator definition for `endpoint`
};

struct pevent; // forward declaration
using endpoints = std::map< endpoint, pevent, endpoint_less >;
using pendpoint = typename endpoints::iterator;

struct vertex { value_type x, y, R; };

struct event_less
{
    // comparator definition for `vertex`
};

using events = std::map< vertex, std::deque< pendpoint >, event_less >;
struct pevent { typename events::iterator ev; }; // currently I use composition
struct pevent : typename events::iterator {}; // but I want to use inheritance - it is much more convenient!

查看n4510我没有看到std::map,但在上面的示例中看来,实际上(至少在当前的 libc ++ 中)成员typedef(或类型)别名)std::map::iterator不依赖于mapped_type(以及value_type)的完整性。

尽管Stadnard(in)使用不完整类型作为mapped_type的一致性,我可以肯定,std::map::iterator始终是(将其用作基础类)?

可以将std::map::iterator实现为指针,而不是类吗?比方说,std::vector的迭代器的调试版本通常不是指针。

0 个答案:

没有答案