秒; } //我什么也没找到。 返回路由器::路由_ptr(); } }; BOOST_PYTHON_模块(http_服务器) { 类(“路由接口”,无初始) .def(“获取接口”,纯虚拟(&RoutingInterface::begin)) .def(“发布实例”,纯虚拟(&RoutingInterface::advance)) .def(“释放实例”,纯虚拟(&RoutingInterface::finish)); 类(“路线”,无初始) .def(“获取接口”,纯虚拟(&Route::获取接口), 返回\u值\u策略()) .def(“release_instance”,纯虚拟(&Route::release_instance)); 类(“路由器”,init()) .def(“添加路由”&路由器::添加路由) .def(“删除路由”,&路由器::删除路由) .def(“路由路径”&路由器::路由路径, 返回_值_策略()); },c++,python,polymorphism,boost-python,C++,Python,Polymorphism,Boost Python" /> 秒; } //我什么也没找到。 返回路由器::路由_ptr(); } }; BOOST_PYTHON_模块(http_服务器) { 类(“路由接口”,无初始) .def(“获取接口”,纯虚拟(&RoutingInterface::begin)) .def(“发布实例”,纯虚拟(&RoutingInterface::advance)) .def(“释放实例”,纯虚拟(&RoutingInterface::finish)); 类(“路线”,无初始) .def(“获取接口”,纯虚拟(&Route::获取接口), 返回\u值\u策略()) .def(“release_instance”,纯虚拟(&Route::release_instance)); 类(“路由器”,init()) .def(“添加路由”&路由器::添加路由) .def(“删除路由”,&路由器::删除路由) .def(“路由路径”&路由器::路由路径, 返回_值_策略()); },c++,python,polymorphism,boost-python,C++,Python,Polymorphism,Boost Python" />

使用boostpython公开纯虚拟类层次结构 我试图使用Posi.python将一组C++类公开给Python。这些类结合了纯虚拟方法和共享指针,通过多态性实现了一致的接口,并执行了一些简单的内存管理(刚刚足够)。以下是完整的来源: // Boost stuff. #include <boost/shared_ptr.hpp> #include <boost/python.hpp> class RoutingInterface { public: virtual ~RoutingInterface() { // Do nothing. } virtual const char* begin(unsigned int& size, unsigned int limit) = 0; virtual const char* advance(const char* data, unsigned int& size, unsigned int limit) = 0; virtual void finish(const char* data) = 0; }; class Route { public: virtual ~Route() { // Do nothing. } virtual RoutingInterface* get_interface() = 0; virtual void release_instance(RoutingInterface* instance) = 0; }; class Router { public: // Useful types. typedef boost::shared_ptr<Route> route_ptr; private: std::map<std::string, route_ptr> Routes; public: // Working with routes. void add_route(std::string path, route_ptr route) { Routes[path] = route; } void remove_route(std::string path) { auto found = Routes.find(path); if(found != Routes.end()) { // Found a nothing. Routes.erase(path); } } route_ptr route_path(std::string path) { auto found = Routes.find(path); if(found != Routes.end()) { // Found a nothing. return found->second; } // Found a nothing. return Router::route_ptr(); } }; BOOST_PYTHON_MODULE(http_server) { class_<RoutingInterface, boost::noncopyable>("RoutingInterface", no_init) .def("get_interface", pure_virtual(&RoutingInterface::begin)) .def("release_instance", pure_virtual(&RoutingInterface::advance)) .def("release_instance", pure_virtual(&RoutingInterface::finish)); class_<Route, boost::noncopyable>("Route", no_init) .def("get_interface", pure_virtual(&Route::get_interface), return_value_policy<reference_existing_object>()) .def("release_instance", pure_virtual(&Route::release_instance)); class_<Router, router_ptr>("Router", init<log_ptr>()) .def("add_route", &Router::add_route) .def("remove_route", &Router::remove_route) .def("route_path", &Router::route_path, return_value_policy<reference_existing_object>()); } //增强功能。 #包括 #包括 类路由接口 { 公众: 虚拟~路由接口() { //什么也不做。 } 虚拟常量字符*开始(无符号整数和大小,无符号整数限制)=0; 虚拟常量字符*高级(常量字符*数据,无符号整数和大小,无符号整数限制)=0; 虚空完成(常量字符*数据)=0; }; 班级路线 { 公众: 虚拟路径() { //什么也不做。 } 虚拟路由接口*get_接口()=0; 虚空释放_实例(RoutingInterface*实例)=0; }; 类路由器 { 公众: //有用的类型。 typedef boost::共享路由; 私人: 地图路线; 公众: //使用路由。 void add_route(标准::字符串路径,route_ptr route) { 路由[路径]=路由; } 无效删除路径(标准::字符串路径) { 自动查找=路由。查找(路径); 如果(找到!=Routes.end()) { //我什么也没找到。 删除(路径); } } 路由路径(std::字符串路径) { 自动查找=路由。查找(路径); 如果(找到!=Routes.end()) { //我什么也没找到。 返回找到->秒; } //我什么也没找到。 返回路由器::路由_ptr(); } }; BOOST_PYTHON_模块(http_服务器) { 类(“路由接口”,无初始) .def(“获取接口”,纯虚拟(&RoutingInterface::begin)) .def(“发布实例”,纯虚拟(&RoutingInterface::advance)) .def(“释放实例”,纯虚拟(&RoutingInterface::finish)); 类(“路线”,无初始) .def(“获取接口”,纯虚拟(&Route::获取接口), 返回\u值\u策略()) .def(“release_instance”,纯虚拟(&Route::release_instance)); 类(“路由器”,init()) .def(“添加路由”&路由器::添加路由) .def(“删除路由”,&路由器::删除路由) .def(“路由路径”&路由器::路由路径, 返回_值_策略()); }

使用boostpython公开纯虚拟类层次结构 我试图使用Posi.python将一组C++类公开给Python。这些类结合了纯虚拟方法和共享指针,通过多态性实现了一致的接口,并执行了一些简单的内存管理(刚刚足够)。以下是完整的来源: // Boost stuff. #include <boost/shared_ptr.hpp> #include <boost/python.hpp> class RoutingInterface { public: virtual ~RoutingInterface() { // Do nothing. } virtual const char* begin(unsigned int& size, unsigned int limit) = 0; virtual const char* advance(const char* data, unsigned int& size, unsigned int limit) = 0; virtual void finish(const char* data) = 0; }; class Route { public: virtual ~Route() { // Do nothing. } virtual RoutingInterface* get_interface() = 0; virtual void release_instance(RoutingInterface* instance) = 0; }; class Router { public: // Useful types. typedef boost::shared_ptr<Route> route_ptr; private: std::map<std::string, route_ptr> Routes; public: // Working with routes. void add_route(std::string path, route_ptr route) { Routes[path] = route; } void remove_route(std::string path) { auto found = Routes.find(path); if(found != Routes.end()) { // Found a nothing. Routes.erase(path); } } route_ptr route_path(std::string path) { auto found = Routes.find(path); if(found != Routes.end()) { // Found a nothing. return found->second; } // Found a nothing. return Router::route_ptr(); } }; BOOST_PYTHON_MODULE(http_server) { class_<RoutingInterface, boost::noncopyable>("RoutingInterface", no_init) .def("get_interface", pure_virtual(&RoutingInterface::begin)) .def("release_instance", pure_virtual(&RoutingInterface::advance)) .def("release_instance", pure_virtual(&RoutingInterface::finish)); class_<Route, boost::noncopyable>("Route", no_init) .def("get_interface", pure_virtual(&Route::get_interface), return_value_policy<reference_existing_object>()) .def("release_instance", pure_virtual(&Route::release_instance)); class_<Router, router_ptr>("Router", init<log_ptr>()) .def("add_route", &Router::add_route) .def("remove_route", &Router::remove_route) .def("route_path", &Router::route_path, return_value_policy<reference_existing_object>()); } //增强功能。 #包括 #包括 类路由接口 { 公众: 虚拟~路由接口() { //什么也不做。 } 虚拟常量字符*开始(无符号整数和大小,无符号整数限制)=0; 虚拟常量字符*高级(常量字符*数据,无符号整数和大小,无符号整数限制)=0; 虚空完成(常量字符*数据)=0; }; 班级路线 { 公众: 虚拟路径() { //什么也不做。 } 虚拟路由接口*get_接口()=0; 虚空释放_实例(RoutingInterface*实例)=0; }; 类路由器 { 公众: //有用的类型。 typedef boost::共享路由; 私人: 地图路线; 公众: //使用路由。 void add_route(标准::字符串路径,route_ptr route) { 路由[路径]=路由; } 无效删除路径(标准::字符串路径) { 自动查找=路由。查找(路径); 如果(找到!=Routes.end()) { //我什么也没找到。 删除(路径); } } 路由路径(std::字符串路径) { 自动查找=路由。查找(路径); 如果(找到!=Routes.end()) { //我什么也没找到。 返回找到->秒; } //我什么也没找到。 返回路由器::路由_ptr(); } }; BOOST_PYTHON_模块(http_服务器) { 类(“路由接口”,无初始) .def(“获取接口”,纯虚拟(&RoutingInterface::begin)) .def(“发布实例”,纯虚拟(&RoutingInterface::advance)) .def(“释放实例”,纯虚拟(&RoutingInterface::finish)); 类(“路线”,无初始) .def(“获取接口”,纯虚拟(&Route::获取接口), 返回\u值\u策略()) .def(“release_instance”,纯虚拟(&Route::release_instance)); 类(“路由器”,init()) .def(“添加路由”&路由器::添加路由) .def(“删除路由”,&路由器::删除路由) .def(“路由路径”&路由器::路由路径, 返回_值_策略()); },c++,python,polymorphism,boost-python,C++,Python,Polymorphism,Boost Python,我将实现从Route和RoutingInterface类继承的类,这些类由工厂方法构造,然后从Python调用工厂方法。Router类是存储路由并允许从中搜索路由的容器 问题是:我还没有能够向Python公开所描述的3个类,并提出一些实际可以编译的东西。我尝试过各种排列,最近的一次尝试显示在上面的源代码中(未编译)。有什么想法吗?你能简化这个例子,然后发布完整的源代码,这样我们就可以编译了。我修改了这个问题,加入了一个完整的源代码例子。

我将实现从Route和RoutingInterface类继承的类,这些类由工厂方法构造,然后从Python调用工厂方法。Router类是存储路由并允许从中搜索路由的容器


问题是:我还没有能够向Python公开所描述的3个类,并提出一些实际可以编译的东西。我尝试过各种排列,最近的一次尝试显示在上面的源代码中(未编译)。有什么想法吗?

你能简化这个例子,然后发布完整的源代码,这样我们就可以编译了。我修改了这个问题,加入了一个完整的源代码例子。