【发布时间】:2011-05-14 10:48:50
【问题描述】:
我有一个案例,我找不到合适的解决方案。我需要有模板基类和一个对该基类做一些工作的管理器类。这是代码
class Base;
class Manager
{
public:
void DoSomethingTo(Base * bclass)
{
if(bclass->PrivateVar == 0)
// Some code
}
}
class Base
{
protected:
int PrivateVar;
friend class Manager;
};
template<class T>
class TempBase : public Base
{
private:
Manager * man;
public:
void DoWork()
{
PrivateVar = 0;
man->DoSomethingTo(this);
}
}
我的问题是 PrivateVar 变量实际上必须是 TempBase 私有的,并且不能从派生自 TempBase 的类中访问,但是由于我无法将其指针传递给 Manager::DoSomethingTo(),因此我必须从基类派生它并且基类必须拥有PrivateVar。而且由于我在 TempBase 中使用 PrivateVar,它不能对 Base 私有,这使得它可以从 TempBase 的子类访问。
如何编写 TempBase 类,使 PrivateVar 成为私有成员,而可以从 Manager::DoSomethingTo() 访问它?
谢谢
【问题讨论】:
标签: c++ templates access-modifiers