Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <boost/python.hpp>
- #include <boost/make_shared.hpp>
- #include <boost/shared_ptr.hpp>
- using namespace boost::python;
- class ExampleObject {
- public:
- std::string name;
- ExampleObject(const std::string & name) : name(name) {}
- virtual ~ExampleObject() {}
- virtual int some_number() { return 12; }
- };
- struct ExampleObject_wrapper : ExampleObject, wrapper<ExampleObject> {
- ExampleObject_wrapper(const std::string & name)
- : ExampleObject(name), wrapper<ExampleObject>()
- {}
- virtual int some_number(void) override {
- if( override func_override = this->get_override("some_number"))
- return func_override();
- return default_some_number();
- }
- int default_some_number(void) {
- return this->ExampleObject::some_number();
- }
- };
- typedef boost::shared_ptr<ExampleObject> ExampleObjectPtr;
- typedef boost::shared_ptr<ExampleObject_wrapper> ExampleObject_wrapper_ptr;
- ExampleObjectPtr create_example_object(const std::string & name) {
- return boost::make_shared<ExampleObject>(name);
- }
- void print_name(ExampleObjectPtr object) {
- std::cout << "Example object named '"
- << object->name
- << "', nr = "
- << object->some_number()
- << std::endl;
- }
- BOOST_PYTHON_MODULE(wraptest) {
- def("create_example_object", &create_example_object);
- def("print_name", &print_name);
- class_<ExampleObject_wrapper, boost::noncopyable, ExampleObject_wrapper_ptr>
- ("ExampleObject", init<const std::string &>())
- .def("some_number", &ExampleObject_wrapper::some_number,
- &ExampleObject_wrapper::default_some_number)
- ;
- }
Advertisement
Add Comment
Please, Sign In to add comment