2014年5月18日日曜日

とりあえずBoost.Pythonを使う(3) Abstract Class

Boost.Pythonを使ってC++の継承関係をラップすることもできる。
親クラスが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 件のコメント:

コメントを投稿