由于私有继承,迭代器无法访问

seg*_*ult 3 c++ stl std inner-classes

我创建了一个std::deque由私有继承组成的新类,即

class B : private std::deque<A>
{ ... };
Run Code Online (Sandbox Code Playgroud)

在我的源代码中我尝试使用B的迭代器,即

B::iterator it
Run Code Online (Sandbox Code Playgroud)

编译器错误是

error C2247: 'std::deque<_Ty>::iterator' not accessible because 'B' uses 'private' to inherit from 'std::deque<_Ty>'
Run Code Online (Sandbox Code Playgroud)

所以问题是,如何使迭代器可访问?

Pio*_*ycz 13

你必须推广这个迭代器类.

使用使用公共部分的关键字.

class B : private std::deque<A>
{ ... 
 public:
   using std::deque<A>::iterator;    
};
Run Code Online (Sandbox Code Playgroud)

对于其他类型以及来自实现基类的其他函数也是如此.

  • @TonyTheLion私有继承是C++语言的一部分.从设计的角度来看,也许组合比这更好 - 但这更容易使用. (6认同)
  • 不,您只是不从STL容器继承 (2认同)