0

BoostPythonを使用してC++クラスのPythonバインディングを作成しようとしています

#include <boost/python.hpp>
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
#include <vector>

using namespace boost::python;

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

    std::string greet() { return msg; }

    MyList2 getList() {
        MyList v1(5, 1), v2(10, 2);
        MyList2 v;
        v.push_back(v1);
        v.push_back(v2);
        std::cout<<"In C++: "<<v.size()<<std::endl;
        return v;
    }

    std::string msg;
};


BOOST_PYTHON_MODULE(test_ext)
{
    class_< std::vector<World> >("MyList")
        .def(vector_indexing_suite< std::vector<World> >() );

    class_<World>("World")
        .def("greet", &World::greet)
        .def("set", &World::set)
        .def("list", &World::getList)
    ;
}

しかし、クラスのベクトルをバインドしようとすると、ベクトルインデックススイートでコンパイルエラーが発生します。

no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = World*, _Container = std::vector<World>, __gnu_cxx::__normal_iterator<_Iterator, _Container>::reference = World&]() == __val’
4

2 に答える 2

2

Pythonリストには、C++ベクトルよりもかなり多くの機能があります。 vector_indexing_suite特にメソッドを定義containsするため、コンテナクラスはを定義する必要がありますoperator==

于 2012-07-27T20:47:15.373 に答える
1

演算子を定義する必要がある理由については、次のことを確認できると思います。

Boost python vector indexing suiteで比較演算子が必要なのはなぜですか?

于 2012-07-28T02:59:01.450 に答える