我尝试在C ++中实现复杂的装饰器。基本上我的代码的重要部分看起来像这样:
class Main {};
class Base : virtual public Main {};
class Deco : virtual public Main {
Deco(Base* base);
};
class Sub : public Base, public Deco {
Sub::Sub(Base* object) :
Deco{object} {}
Sub();
};
还有其他类,如Sub,只有其他名称。 现在我希望能够写出这样的东西:
Main* object = new Sub1(new Sub2(new Sub1()));
我不想在内部范围内创建新的Base,只需要Subs。 以下方法将导致分段错误:
Sub::Sub() :
Deco{this} {}
我不知道为什么会这样。有没有办法解决这个问题或避免在这里初始化Deco?
答案 0 :(得分:0)
找到答案:这是钻石问题的一个很好的例子。无法修复该构造。
必须用类Deco
中的指针替换Base
类。