多くのクラスを使用する C++ プロジェクトがあります。主なクラスは ' sso::Object' (すべてのクラスは 'sso' 名前空間にあります) で、このクラスは他のいくつかのクラスに派生しますが、抽象クラスは ' sso::Drawable' です。
sso::Drawable::set_opacityこのクラスには ' ' と ' ' の2 つの純粋仮想メソッドがあり、これら 2 つのメソッドを実装するsso::Drawable::raw_draw' ' などの他のクラスに派生します。sso::View
C++ で使用するとプロジェクト全体が正常に動作しますが、Python でも使用したいので、次のような Boost.Python モジュールを作成しました。
class DrawableWrapper : public sso::Drawable , public wrapper<sso::Drawable> {
public:
    void set_opacity(byte opacity) { this->get_override("set_opacity")(opacity); }
    void raw_draw(const sso::Rect &rect,sso::Target &target,const sso::Position &position) const {
        this->get_override("raw_draw")(rect,target,position);
    }
};
BOOST_PYTHON_MODULE(sso) {
    class_<DrawableWrapper,boost::noncopyable> ("Drawable",init<>())
        .add_property ("opacity",&sso::Drawable::get_opacity)
        // python_sso_getter & python_sso_setter_* are only used for an easier access to accessors
        .add_property ("position",python_sso_getter<sso::Drawable,sso::Position,&sso::Drawable::get_position>,python_sso_setter_1_const<sso::Drawable,sso::Position,&sso::Drawable::set_position>)
        .def("raw_draw",pure_virtual(&sso::Drawable::raw_draw))
   ;
    class_<sso::View,bases<sso::Drawable> >                 ("View",init<>())
        .def("insert",python_sso_setter_1<sso::View,sso::Drawable*,&sso::View::insert>)
        .def("remove",&sso::View::erase)
    ;
}
このコードはエラーなしでコンパイルされますが、Python でこれらの行を実行すると:
myview = sso.View()
print myview
私はこの出力を得る:
<0x7f9d2681a4b0 の sso.View オブジェクト>
しかし、私の C++ デバッガーは、変数 'v' (python 'myview') は ' sso::Object' インスタンスであり、' ' インスタンスではないことを教えてくれますsso::View。sso::View::View()が呼び出されますが、変数の型はビューではなく、理由がわかりません。それについて何か考えはありますか?あなたはそのようなことをして、それを機能させる方法を見つけましたか?
私は Python2.7 と Boost.Python1.49 と gcc バージョン 4.6.1 を使用しています
編集: 私は間違いを犯しました:sso::Drawableは から継承しませんsso::Objectが、sso::View(=多重継承) は継承します。