2012-08-23 111 views
0

爲了實現自己的迭代器,我想實現這樣的:從受保護的嵌套類繼承的公共嵌套類?

class MyClass : 
{ 
    public: 
     class MyIterator1 {;}; 
     class MyIterator2 {;}; 
     class MyIterator3 {;}; 
}; 

由於這些迭代器將具有一些共同的行爲,這將是更好,如果他們從所謂MyBaseIterator一個基本的迭代器繼承。但我認爲MyBaseIterator是實現的細節:用戶不應該直接使用MyClass::MyBaseIterator。是以下確定:

class MyClass : 
{ 
    protected: 
     class MyBaseIterator; 
    public: 
     class MyIterator1 : public MyBaseIterator {;}; 
     class MyIterator2 : public MyBaseIterator {;}; 
     class MyIterator3 : public MyBaseIterator {;}; 
}; 

將從MyBaseIterator衍生成員提供給用戶即使MyBaseIterator受到保護?

+0

你正在創建什麼樣的集合類型,以便在一個類中需要三個diff迭代器? 0O –

回答

1

是的,除非用戶延伸MyClass。要完全拒絕訪問,請將其設爲私有。另外,並不是說你只能在課堂上做MyBaseIterator有意義的事情(猜你已經知道了)。

而且,完全隱藏實現細節,你應該看看PIMPL方法