我有一些麻煩看到什麼是最好的方式來包裝一系列與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