Exposing Classes

C++ クラスを Python に開扉しよう。

Python に公開したい C++ クラスまたは構造体を考えてみよう。

    struct World
    {
        void set(std::string msg) { this->msg = msg; }
        std::string greet() { return msg; }
        std::string msg;
    };

これを、Boost.Python ラッパ書式に合わせることで、 Python に開示可能である。

    #include <boost/python.hpp>
    using namespace boost::python;

    BOOST_PYTHON_MODULE(hello)
    {
        class_<World>("World")
            .def("greet", &World::greet)
            .def("set", &World::set)
        ;
    }

これは、開示したいメンバ関数 greetset のラッパの記述である。 このあと共有ライブラリをビルドすれば、Worldクラスを Python で使えるようになる。 下記は Python セッションの例である。

    >>> import hello
    >>> planet = hello.World()
    >>> planet.set('howdy')
    >>> planet.greet()
    'howdy'