外层类可以访问内部类私有方法/成员吗?

时间:2018-03-03 23:01:23

标签: c++ containers private inner-classes

我在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_)
        {}

        ...

     };

   ...

};

0 个答案:

没有答案