提升类的 Python 绑定向量

Posted

技术标签:

【中文标题】提升类的 Python 绑定向量【英文标题】:Boost Python binding Vector of a Class 【发布时间】:2012-07-27 13:21:18 【问题描述】:

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

【问题讨论】:

定义MyListMyList2 【参考方案1】:

Python 列表比 C++ 向量具有更多功能。 vector_indexing_suite 定义了contains 方法等,所以你的容器类必须定义operator==

【讨论】:

我是在一辆时速 85 英里的汽车上在平板电脑上输入这个答案的。不会再尝试了:)【参考方案2】:

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

why do I need comparison operators in boost python vector indexing suite?

【讨论】:

以上是关于提升类的 Python 绑定向量的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 的 libsvm 支持具有高维输出的向量回归

如何使用 MPI 广播提升向量?

在绑定向量中注释 Clojure

填充提升向量或矩阵

用成对向量提升几何区域?

使用 SWIG 在 Python 中 C++ 类的奇怪行为