on Wed Oct 29 2008, Hans Meine <hans_meine-AT-gmx.net> wrote: > On Mittwoch 29 Oktober 2008, David Abrahams wrote: >> The above should be a complete guide. Any questions? > > Great, thanks a lot for the write-up. I think my second question is still > left, at least from your post and the docs at > http://www.boost.org/doc/libs/1_36_0/libs/python/doc/v2/handle.html > I have the impression that a handle<> can only be created from PyObject-style > pointers.
Only from a pointer whose target's initial members are layout-compatible with PyObject, to be precise. > So, let's say I have exported a class Foo, and I write a wrapper > for a factory function that creates a new Foo, and wants to convert it to > python in order to manually add some attributes (cf. my deep_copy > implementation). Is there a better way than the following for creating > result from new_foo? > > Foo *new_foo = new Foo(...); > bp::object result = > bp::detail::new_reference( > typename manage_new_object::apply<Foo *>::type()(new_foo); > result.attr("bar") = 42; > return result; Either of these works: boost::shared_ptr<Foo> px(new Foo(...)); object result(px); result.attr("bar") = 42; return result; or: class_<Foo, ...> py_foo(...); py_foo.def(...) .def(...) ; ... object result = py_foo( ... ); result.attr("bar") = 42; return result; -- Dave Abrahams BoostPro Computing http://www.boostpro.com _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig