[C++-sig] Boost.Python: same class in several modules

William Ladwig wladwig at wdtinc.com
Tue Jul 14 17:15:57 CEST 2009


Are you using the static or dynamic version of the boost python library?  This looks similar to a problem a coworker had and switching to the dynamic version of the library fixed his problem.  According to the documentation, the dynamic version of the library "contains a type conversion registry. Because one registry is shared among all extension modules, instances of a class exposed to Python in one dynamically-loaded extension module can be passed to functions exposed in another such module."

Also, if you organize your extension modules to be used within packages, you can use __init__.py magic to load any extension classes before using them.  I had to do this once when I defined a base class in one extension module and subclassed it in another.  I believe the dynamic version of the boost python library is required for this to work.

Regards, 

Bill



-----Original Message-----
From: cplusplus-sig-bounces+wladwig=wdtinc.com at python.org [mailto:cplusplus-sig-bounces+wladwig=wdtinc.com at python.org] On Behalf Of Rock Lobster
Sent: Tuesday, July 14, 2009 9:48 AM
To: cplusplus-sig at python.org
Subject: [C++-sig] Boost.Python: same class in several modules


Hello,

I tried to do the following:
I've got two Python modules which are both wrapped by boost.python, and both
of them share some header files, so there are several classes which are used
by both modules.

As an easy example:
- first module is called "videolib" and second module is called "videofx"
- both modules use a class called "VideoFile", which is inside a single
"videofile.h" (included by both modules)
- videolib module has a function that returns a VideoFile*.
- videofx module has a class with a method that accepts VideoFile* as a
parameter.

Now I'd like to use both modules in Python, and call e.g.
videolib.createVideoFile() and then use the returned object to put it into
the, let's say, videofx.doSomethingWith(vf) method.

But the problem is that Python doesn't know that both VideoFile* types are
exactly the same, so he says "Python argument types did not match C++
signature".

Is there anything I can do to manage this situation? Or would I have to
re-engineer the library structures?

Nice greetings and thanks in advance
Chris
-- 
View this message in context: http://www.nabble.com/Boost.Python%3A-same-class-in-several-modules-tp24479797p24479797.html
Sent from the Python - c++-sig mailing list archive at Nabble.com.

_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig at python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig


More information about the Cplusplus-sig mailing list