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