Instantiating and initialising C++ with embedded Python

Martin v. Löwis loewis at informatik.hu-berlin.de
Tue Sep 17 22:42:50 CEST 2002


Morfeas <greek_bill at yahoo.com> writes:

> 1. My main program is in C++, so I need to embed the python interpreter.

Correct.

> 2. I need to allow python access to my C++ classes, therefore I need to 
> extend the embedded interpreter.

Correct.

> a) a brief description of the whole process

You need to provide two things:

- modules that expose "core" functions of your API,
- Python "types" that encapsulate your C++ objects.

The Python interpreter has a global table of all available modules,
Modules/config.c:_PyImport_Inittab. This table lists entry points for
all "builtin" modules. You need to compose a table that has all the
"standard" builtin modules you want to use in your scripts, plus any
extension modules that you implement yourself.

In addition, to wrap C++ objects, you need to define "type objects",
which are structures that essentially contain function pointers to the
"virtual method tables" of a Python type; associated with such a type
is a C structure that defines the layout of actual instances of the
type.

> b) some code examples

See Modules/xxmodule.c for an example of an extension module; I
recommend to also read the "Embedding and Extending" tutorial.

> c) suggestions about useful tools

I'd recommend to write all the necessary code by hand. People will
suggest various tools, specifically:

- SWIG, which can generate wrappers around existing APIs,
- CXX, which exposes the Python API in a C++-ish way,
- Boost Python, to wrap C++ libraries.

HTH,
Martin



More information about the Python-list mailing list