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
[email protected]
http://mail.python.org/mailman/listinfo/cplusplus-sig