sybren

Boost::Python issue

May 23rd, 2012
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. #include <boost/python.hpp>
  2. #include <boost/make_shared.hpp>
  3. #include <boost/shared_ptr.hpp>
  4.  
  5. using namespace boost::python;
  6.  
  7. class ExampleObject {
  8. public:
  9.     std::string name;
  10.  
  11.     ExampleObject(const std::string & name) : name(name) {}
  12.     virtual ~ExampleObject() {}
  13.     virtual int some_number() { return 12; }
  14. };
  15.  
  16. struct ExampleObject_wrapper : ExampleObject, wrapper<ExampleObject> {
  17.     ExampleObject_wrapper(const std::string & name)
  18.         : ExampleObject(name), wrapper<ExampleObject>()
  19.     {}
  20.  
  21.     virtual int some_number(void) override {
  22.         if( override func_override = this->get_override("some_number"))
  23.             return func_override();
  24.         return default_some_number();
  25.     }
  26.  
  27.     int default_some_number(void) {
  28.         return this->ExampleObject::some_number();
  29.     }
  30. };
  31.  
  32. typedef boost::shared_ptr<ExampleObject> ExampleObjectPtr;
  33. typedef boost::shared_ptr<ExampleObject_wrapper> ExampleObject_wrapper_ptr;
  34.  
  35. ExampleObjectPtr create_example_object(const std::string & name) {
  36.     return boost::make_shared<ExampleObject>(name);
  37. }
  38.  
  39. void print_name(ExampleObjectPtr object) {
  40.     std::cout << "Example object named '"
  41.         << object->name
  42.         << "', nr = "
  43.         << object->some_number()
  44.         << std::endl;
  45. }
  46.  
  47. BOOST_PYTHON_MODULE(wraptest) {
  48.     def("create_example_object", &create_example_object);
  49.     def("print_name", &print_name);
  50.  
  51.     class_<ExampleObject_wrapper, boost::noncopyable, ExampleObject_wrapper_ptr>
  52.         ("ExampleObject", init<const std::string &>())
  53.         .def("some_number", &ExampleObject_wrapper::some_number,
  54.                             &ExampleObject_wrapper::default_some_number)
  55.     ;
  56.  
  57. }
Advertisement
Add Comment
Please, Sign In to add comment