从静态对象的内部类调用外部类虚函数

时间:2012-10-22 21:43:44

标签: c++

比单词解释更容易展示

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 *函数构建它。如果上述情况无法实现,有人可以建议另一种好的解决方案吗?感谢。

2 个答案:

答案 0 :(得分:1)

你可以。

嵌套(内部)类是具有普通成员的所有访问权限的成员,因此可以访问其外部类的受保护和私有成员。

问题是:在哪个对象上调用它?

答案 1 :(得分: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
}
相关问题