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 类的实例,并将它提供给任何派生类。我还需要根据虚拟 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 回答