0

言葉だけで説明するより見せた方が簡単

class OutterBase{
     protected:
       virtual ItemList buildDefaultItemListForCatagory1();

       class Inner{
           ItemList catagory1, catagory2;
           public: 
               void Inner(){ _initOnce(); }
           private:
               void _initOnce(){ 
                    /* want to be able call the virtual buildDefaultItemListForCatagory1 */
               }
       }

     typedef Singleton<Inner> InnerClassType; //has static getInstance method to get Inner object
}

class OutterDerived: public OutterBase{
   virtual ItemList buildDefaultItemListForCatagory1();
}

というわけで今の状況です。Inner::_initOnce 関数内で仮想の buildDefaultItemListForCatagory1 を呼び出せるようにしたいと考えています。これを行う方法はありますか。

それができない場合は、これを再設計する必要があります。OutterBase に Inner クラスのインスタンスを 1 つだけ持ち、それを派生クラスで使用できるようにしたいと考えています。また、仮想 buildDefault* 関数に応じて構築する必要があります。上記が達成できない場合、誰かが代替の良い解決策を提案できますか? ありがとう。

4

2 に答える 2

1

あなたはできる。

ネストされた (内部) クラスは、通常のメンバーのすべてのアクセス権を持つメンバーであるため、その外部クラスの保護されたプライベート メンバーにアクセスできます。

問題は、どのオブジェクトで呼び出すかです。

于 2012-10-22T21:50:45.007 に答える
0

外側のオブジェクトを内側のクラス コンストラクターに渡して、次のようにすることができます。

class OutterBase{
     protected:
       virtual ItemList buildDefaultItemListForCatagory1();

       class Inner{
           ItemList catagory1, catagory2;
           OutterBase *outter;
           public: 
               Inner(OutterBase *_outter){ outter=_outter;_initOnce(); }
           private:
               void _initOnce(){ 
                    outter->buildDefaultItemListForCatagory1();
               }
       }

     typedef Singleton<Inner> InnerClassType; //has static getInstance method to get Inner object
}
于 2012-10-22T21:53:12.790 に答える