类的Boost Python绑定向量

Boost Python binding Vector of a Class

本文关键字:向量 绑定 Python Boost 类的      更新时间:2023-10-16

我正在尝试使用Boost python 为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’

Python列表比C++向量有更多的功能。vector_indexing_suite定义了contains方法以及其他方法,因此容器类必须定义operator==

关于为什么我们需要定义运算符,我认为可以检查以下内容:

为什么在boost-python矢量索引套件中需要比较运算符?