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)