I'm trying to wrap an API that uses method chaining (methods that return reference to same object) and restricts assignment/copy. Is there a reason I can't use return_internal_reference?
# want to be able to do this in Python d = myexample.Derived("name") d.setSomething(500).execute() But I get a segfault at return of setSomething() If I separate the 2 method calls it works. Here is the API and boost::python wrapper: enum MODES {A,B}; class Base { public: Base(const string& p); virtual ~Base(); void execute(MODES mode = A); private: string pn; Base& operator=(const Base& rhs); Base(const Base&); }; class Derived : public Base { public: Derived(const string& p); virtual ~Derived(); Derived& setSomething(int a); private: int aa; }; BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(d_o,execute,0,1) BOOST_PYTHON_MODULE(myexample) { class_<Base,boost::noncopyable>("Base",no_init); class_<Derived, bases<Base>,boost::noncopyable >("Derived",init<string>()) .def("execute",&Derived::execute,d_o()) .def("setSomething",&Derived::setSomething, return_internal_reference<>()) //.def("setSomething",&Derived::setSomething, return_value_policy<reference_existing_object>()) //.def("setSomething",&Derived::setSomething, return_value_policy<copy_non_const_reference>()); }
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig