From: <pp...@fy...> - 2006-01-27 21:13:54
|
Dear All, I am trying to use directors to be able to overwrite virtual methods of the underlying C++ library in Python. When creating the director classes for all classes and all virtual methods, everything works as expected, but I am having trouble if I try to limit the creation of the directors to only those methods for which it is necessary. To illustrate the problem, I have created the following example with C++ header "clib.h" as class Base { public: void call(); virtual void method(); }; class CDerived : public Base { public: void method(); }; the corresponding implementation "clib.cpp" as #include "clib.h" #include <iostream> using namespace std; void Base::call() { method(); } void Base::method() { cout << "Base::method" << endl; } void CDerived::method() { cout << "CDerived::method" << endl; } the interface file "clib.i" as %module(directors="1") clib; %feature("director"); %{ #include "clib.h" %} class Base { public: void call(); virtual void method(); }; class CDerived : public Base { public: void method(); }; and a Python code "test.py" to try the bindings as from clib import * class PythonDerived(CDerived): def method(self): print "PythonDerived::method" pd = PythonDerived() pd.call() When running the code as above, it prints PythonDerived::method as expected. However, if a change the line %feature("director"); in the interface file to either one of the following (as instructed in section 26.5.1 of the manual) %feature("director") Base::method; %feature("director") CDerived::method; or both, test.py prints CDerived::method which is wrong since I would like to have the overwritten method in PythonDerived to be called. What am I doing wrong here or what's going on? I am using swig 1.3.27, python 2.3.5 and gcc 4.0.3 (all as distributed by Debian) and I create the wrappers and compile them with the following command sequence g++ -c -o clib.o clib.cpp swig -c++ -python clib.i g++ -c -o clib_wrap.o clib_wrap.cxx -I/usr/include/python2.3 g++ -shared -o _clib.so clib.o clib_wrap.o Best Regards, Matti -- Matti Peltomaki, Graduate Student Laboratory of Physics Helsinki University of Technology 040 7576977, room Y308B |