我有一个类,它包含MyObjects形式的数据,如类A。
我希望监视MyObject对象中的数据。所以我创建了一个IMonitorable类,
从IMonitorable派生了所有包含MyObjects的存储类。 Add将IMonitorable类作为朋友添加到了我的监视类中。
class IMonitorable
{}
class a : public IMonitorable
{
protected:
struct myData
{
MyObject a;
MyObject b;
...
} data;
}
class Monitor
{
public:
friend IMonitorable;
AddData(a& stroage);
AddObject(MyObject& obj);
}
当我有一个带有已知myData结构的存储类时,此方法运行良好。我打了电话
AddData(InstanceOfA);
并将MyObject a,b,..添加到我的监视机制中。
现在,我有几个存储类,并且我不想为所有存储类编写AddData方法。我想到了一个AddObject方法,使其能够具有适用于所有存储类的单个点。
AddObject(InstanceOfA.data.a);
AddObject(InstanceOfA.data.b);
...
但是,如果我在代码中的某处调用gcc会抛出错误数据.a被保护,那是对的。
有没有办法在不知道存储类结构的情况下将受保护的MyObject的引用或指针添加到Monitor?
最佳答案
您声明struct myData
为受保护。 friend IMonitorable
将IMonitorable
声明为朋友类,这意味着IMonitorable
可以访问Monitor
类的私有成员。要从Monitor
访问私有成员,请使用getter
功能:
class a : public IMonitorable
{
public:
const myData* const getData()const
{
return &data;
}
myData* getData()
{
return &data;
}
protected:
struct myData
{
MyObject a;
MyObject b;
...
} data;
}
用它:
AddObject(InstanceOfA.getData()->a);