我在HashSet类中编写了一个迭代器类。
但是,迭代器类的一些构造函数只能在HashSet类中使用。
我认为通过将它们设为私有来隐藏它们是个好主意。有没有办法使外部类可以访问内部类私有方法?
如果没有,是否有另一种方法可以使这些构造函数只能从HashSet类的内部访问?
编辑:
我知道如何从内部类访问外部类私有成员, 但我问如何从外部类访问内部类私有成员, 所以这个问题不重复。
这是我的源代码:
template <typename val_type,
typename prehash = std::hash<val_type> >
class HashSet {
...
template<typename val_type>
class forward_iterator :
public std::iterator<std::forward_iterator_tag, SList<val_type> > {
public: // I want to keep those 3 constructors
// accessible to anyone
forward_iterator() :
ptr(nullptr),
parent(nullptr),
pos(-1)
{}
forward_iterator(const forward_iterator* rhs) :
ptr(rhs->ptr),
parent(rhs->parent),
ptr_it(rhs->ptr_it),
pos(rhs->pos)
{}
forward_iterator(const forward_iterator& rhs) :
ptr(rhs.ptr),
parent(rhs.parent),
ptr_it(rhs.ptr_it),
pos(rhs.pos)
{}
private: // I want to hide the below constructors
//from anyone not in
//HashSet class
forward_iterator(pointer p, list_iterator liter, HashSet* prnt,
long long int pos_) :
ptr(p),
ptr_it(liter),
parent(prnt),
pos(pos_)
{}
forward_iterator(reference p, list_iterator liter, HashSet* prnt,
long long int pos_) :
ptr(p),
ptr_it(liter),
parent(prnt),
pos(pos_)
{}
...
};
...
};