[C++-sig] Re: instantiating python objects within C++
Stefan Seefeld
seefeld at sympatico.ca
Tue May 27 01:53:29 CEST 2003
David Abrahams wrote:
>>The python interpreter then figures out that it should create the so
>>defined wrapper object and wrap it around my existing foo instance.
>
>
> It's not really clear to me just what you mean.
What I understood well from your tutorial was how to define python
type objects (wrappers around C++ classes) and how to inject them into
a given module. What I was missing was how to instantiate python
objects of these types. Once I'v seen it it appears quite 'natural' and
it was in fact such a simple construct that I was expecting. I guess
a simple example near the 'embedding' section in the tutorial would
clarify things a lot.
What I'm doing right now is this:
class Foo {/*...*/};
python::class_<Foo> foo_type("Foo");
foo_type.add_property("value", &Foo::get_value, &Foo::set_value);
python::object foo_wrapper = foo_type();
main_namespace["object"] = foo_wrapper; // globale object, used later...
FILE *fp = fopen("script.py", "r");
python::handle<> result2(PyRun_File(fp, "script.py", Py_file_input,
main_namespace.ptr(), main_namespace.ptr()));
python::object callable = python::extract<python::object>(main_namespace["set"]);
callable(boost::reference_wrapper<Foo>(foo));
What I was missing here (and still don't really understand) is how the
definition of 'foo_type' above somewhere registers itself such that the call in the
last line will find it *at runtime*. That's what I was referring to with 'the python
interpreter'. Would 'python runtime' be a better term ?
> Hmm. Well, yeah, a description of the conversion mechanisms would be
> good to have.
Absolutely, I guess that was the piece of the puzzle that I was missing.
Best regards,
Stefan
More information about the Cplusplus-sig
mailing list