Boost.Pythonを使ってC++の継承関係をラップすることもできる。
no_initを記述してなくて、コンパイル時ずっとabstract classがどうとかいうエラーが出ていた。
親クラスがvirtual=0なメソッドを持っているときは、(Abstract ClassとかInterfaceとか)は以下のようにすればよい。
ラッパー側は以下のようにする。
class BaseShape { public: virtual ~BaseShape(){} virtual std::string toString() const = 0; }; class Sphere : public BaseShape { public: Sphere(double r); ~Sphere(); std::string toString() const; private: double _r; };
ラッパー側は以下のようにする。
class_<BaseShape, boost::noncopyable>("BaseShape", no_init) .def("__str__", &BaseShape::toString) ; class_<Sphere, bases<BaseShape> > ("Sphere", init<double>()) .def("__str__", &Sphere::toString) ;
no_initを記述してなくて、コンパイル時ずっとabstract classがどうとかいうエラーが出ていた。
0 件のコメント:
コメントを投稿