类的Boost Python绑定向量
Boost Python binding Vector of a Class
我正在尝试使用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矢量索引套件中需要比较运算符?
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 视觉studo 2019中的漫画和静态/动态绑定
- 将自由函数绑定为类成员函数
- 将常量指针引用绑定到非常量指针
- 在派生类中绑定非静态模板化成员函数
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 在 openGL 中多次绑定缓冲区
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 创建一个函数的 Python 绑定,返回指向带有 boost 的向量的指针
- 结构化绑定,无需复制即可获取子向量的连续元素
- 值未正确绑定到向量中
- 如何将参数的::std::向量绑定到函子
- Boost绑定和Boost函数,将带有参数的函数存储在向量中,然后执行它们
- 类的Boost Python绑定向量
- 提升与向量成员函数的绑定
- c++正则化向量;错误:无法绑定