1

我有一个Playable由两个不同的类继承的类:Note并且Track. 该类Track有一个Generator经常使用且非常大的类型的成员。Track 也有一个 Note-objects 的 multimap。创建的每个音符始终添加到正确的轨道。

我的问题是在某些情况下 Note 类也需要访问Tracks Generator-member.

我想通过给 Note 一个Track &trackReference成员来实现这一点,这样我就可以找到正确Generator的方法,trackReference但问题是我不能使用默认构造函数,因为引用不能为空。有时我的 Note 对象只是空的,所以我真的需要 Note 的默认构造函数。

那么如何实现这一点,以便我可以从每个 Note 访问 Generator 对象?

4

2 回答 2

1

如果您的设计允许空实现,那是一种可能的途径。这是一个例子:

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 回答