提升类的 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’
【问题讨论】:
定义MyList
和MyList2
【参考方案1】:
Python 列表比 C++ 向量具有更多功能。 vector_indexing_suite
定义了contains
方法等,所以你的容器类必须定义operator==
。
【讨论】:
我是在一辆时速 85 英里的汽车上在平板电脑上输入这个答案的。不会再尝试了:)【参考方案2】:为什么我们需要定义运算符,我认为可以检查以下内容:
why do I need comparison operators in boost python vector indexing suite?
【讨论】:
以上是关于提升类的 Python 绑定向量的主要内容,如果未能解决你的问题,请参考以下文章