我有一些麻烦看到什么是最好的方式来包装一系列与Boost.Python的类,同时避免凌乱的继承问题。说我有类A,B和C结构如下:Boost.Python包装层次结构避免钻石继承
struct A {
virtual void foo();
virtual void bar();
virtual void baz();
};
struct B : public A {
virtual void quux();
};
struct C : public A {
virtual void foobar();
};
我想包装的所有类A,B和C使得它们从Python的扩展。为实现这一点的通常方法是沿着线:
struct A_Wrapper : public A, boost::python::wrapper<A> {
//dispatch logic for virtual functions
};
现在对于B级和C从AI延长想能够继承并分享A.包装实施所以我想能够沿着线做一些事情:
struct B_Wrapper : public B, public A_Wrapper, public boost::python::wrapper<B> {
//dispatch logic specific for B
};
struct C_Wrapper : public C, public A_Wrapper, public boost::python::wrapper<C> {
//dispatch logic specific for C
}
然而,这似乎是将引入污秽的所有方式与升压包装基地双遗产和A在B_Wrapper和C_Wrapper的双遗产对象。有没有一种常见的方式来解决我失踪的这个实例?
谢谢。
感谢您的答复。 如果我无法修改继承关系以利用虚拟继承,那么情况如何?这个解决方案也发生在我身上,但它不是超级吸引人的,并且是过度侵入性的。当然,这是一个相当常见的操作,即包装一个类型层次结构,层次结构中的多个非叶子点可以通过Python扩展,但是我一直无法找到它的任何讨论。 – user21714 2010-05-08 00:36:28