如果你真的坚持这种行为,一种可能是添加额外的类。。。
struct XBase { ... };
struct YBase { ... };
struct X : public XBase, public Typedef<X> { ... };
struct Y : public YBase, public Typedef<Y> { ... };
struct ABase { ... };
struct BBase { ... };
struct A :
public ABase,
public XBase,
public Typedef<A> { ... };
struct B :
public BBase,
public XBase,
public YBase,
public Typedef<B> { ... };
然而,正如我在评论中解释的那样,我一般不建议采取这种做法。
应避免多重(公共)继承,因为它会产生强耦合。通常最好使用合成。接口类是一个例外(如果您希望能够从其接口指针销毁对象,则仅限纯虚拟函数和可能的虚拟析构函数)。混合可能是另一种情况,在这种情况下,多重继承可能很有用,但在这种情况下,您将使用私有继承,即使在这种情况下,组合也可能更可取。如果您想要进行重大更改,那么耦合越少,系统就越容易维护。
正如我在评论中解释的那样,定义这样的typedef可能不是一个好主意,因为
std::unique_ptr<>
std::unique_ptr<A> Func();
无论如何它使函数应该如何使用变得更加明显。