1

Playable2つの異なるクラスに継承されるクラスがNoteありますTrack. 。クラスには、非常に頻繁に使用され、非常に大きいTrackタイプのメンバーがあります。GeneratorTrackには、Noteオブジェクトのマルチマップもあります。作成されたすべてのメモは、常に正しいトラックに追加されます。

私の問題は、Noteクラスもアクセスする必要がある場合がいくつかあることです。Tracks Generator-member.

Noteにメンバーを与えて、正しいものをTrack &trackReference見つけられるようにしたかったのですが、これに関する問題は、参照を空にすることができないため、デフォルトのコンストラクターを使用できないことです。また、Noteオブジェクトが空である場合もあるため、Noteのデフォルトコンストラクタが本当に必要です。GeneratortrackReference

では、これを実装して、すべてのノートからGeneratorオブジェクトにアクセスできるようにするにはどうすればよいですか?

4

2 に答える 2

1

設計で null 実装が許可されている場合、それが可能なルートです。次に例を示します。

class foo
{
public:
   virtual void bar() = 0;
};

class null_foo
   : public foo
{
   virtual void bar() {}
};

class C
{
public:
   C(foo& f) : ref(f)  {}
   C() : ref(null_foo) {};

private:
   foo& ref;
};

ここに関連する質問があります。

于 2012-10-09T19:28:42.527 に答える
0

Track*代わりに使用するだけTrack&で、参照では使用できない関数を実装するための多くの利点もあります。例えば:

bool HasParent() {return trackReference != NULL;}
Track& track() {return *trackReference;}
于 2012-10-09T19:38:13.597 に答える