小编her*_*tic的帖子

如何将C++对象转换为boost :: python :: object?

bp :: extract将bp :: object转换为特定类型.问题是怎么做副歌?

我们假设我有一个PointContainer和Point类.我需要一个具有这种签名的功能

bp::object get_point(const PointContainer &, const bp::object & input);
Run Code Online (Sandbox Code Playgroud)

它应检查输入参数是否为整数.在这种情况下,它返回PointContainer中具有相应索引的Point实例的引用.如果它不是整数,那么函数检查输入是否是切片对象(例如mylist [1:10:2]).在这种情况下,它返回PointContainer的副本.

问题是如何将Point,PointContainer实例转换为bp :: objects?

有关上述课程的一些细节

class_<Point<int>>("Point")
    .def("__getitem__", get_point_item)
    .def("__setitem__", set_point_item)
    .def("__len__", get_point_size)
    .def("__str__", print_point)
    .def("__eq__", &Point<int>::operator ==)
    .def("__ne__", &Point<int>::operator !=)
    .def("set_x", &Point<int>::set_x)
    .def("get_x", &Point<int>::get_x)
    .def("set_y", &Point<int>::set_y)
    .def("get_y", &Point<int>::get_y)
;

typedef std::vector<Point<int>> PointContainer;
typedef boost::shared_ptr<PointContainer> PointContainerPtr;

class_<PointContainer, PointContainerPtr>("PointContainer")
    .def("__iter__", iterator<PointContainer>())
    .def("__getitem__", get_point)
    .def("__setitem__", set_point)
    .def("__len__", &PointContainer::size)
    .def("append", push_point)
    .def("reserve", &PointContainer::reserve)
    .def("clear", &PointContainer::clear)
;
Run Code Online (Sandbox Code Playgroud)

c++ boost-python

1
推荐指数
1
解决办法
2864
查看次数

标签 统计

boost-python ×1

c++ ×1