hi.
As you might know in the meanwhile, I want to insert references (not instances) of C++ objects into a boost::python::list. I thought that calling
CPPObject cpp_obj; list.insert(0,handle<>(borrowed(cpp_obj))) First, please do what Ralf said and read the fine tutorial front-to-back beforte proceeding, or trying anything I've said below. You need to get a better sense of how the library works in order to understand any advice we can give here.
I did that, you were right. I also did some reading about extending and embedding python. It's getting clearer now, but there is still one questian unsolved (see below).
One way, but not neccessarily a safe one, to get a Python object into your list which wraps a reference to a C++ object, is
list.insert(0, boost::ref(cpp_obj));
I say "not neccessarily safe" because there is nothing here to help manage the lifetime of the C++ object properly; if it is destroyed before the last Python reference you could crash the program with Python code.
This works. I use with_custodian_and_ward to bind the lifetime of cpp_obj to the object that inserts it into its list of references. There encountert no lifetime problem when using the classes as python extensions. However, trying to use my classes with embedded python still troubles me. The thing I don't understand is the following: when I insert a cpp_obj in python, I deal with a python::object because of the wrapper classes, which works fine. But when I use the same (unwrapped) classes for embedded python, any attempt to insert ref(cpp_obj) into my python::list still dumps. What is the reason therefore? Is there a concept I haven't understood yet? Thank you for the patience! - harold - -- "2x2 = grĂ¼n" -- Heinz von Foerster