クラス A のような MyObjects の形式でデータを含むクラスがあります。MyObject オブジェクトのデータを監視したいと考えています。そこで、IMonitorable クラスを作成し、MyObjects を含むすべてのストレージ クラスを IMonitorable から派生させました。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 構造体を持つストレージ クラスが 1 つある間は問題なく機能しました。私は呼びました
AddData(InstanceOfA);
MyObject a、b、..を監視メカニズムに追加しました。
現在、いくつかのストレージ クラスがあり、すべてのストレージ クラスに対して AddData メソッドを記述したくありません。すべてのストレージ クラスに適した単一のポイントを持つことができる AddObject メソッドを持つことを考えました。
AddObject(InstanceOfA.data.a);
AddObject(InstanceOfA.data.b);
...
しかし、コードのどこかでこれを呼び出すと、gcc が data.a is protected というエラーをスローします。
ストレージ クラスの構造を知らなくても、保護された MyObject の参照またはポインタを Monitor に追加する方法はありますか?