L
Lars Moastuen
Im trying to extend a class written in C++ in Python and use this
extended class in a C++ call... I made an example to clarify:
-- Foo.h --
#ifndef FOO_H
#define FOO_H
#include <iostream>
using namespace std;
class Foo;
class Bar;
class Bar
{
public:
Bar() {};
~Bar() {};
virtual char* DoBar() const { return "Bar"; };
};
class Foo
{
public:
Foo() {};
~Foo() {};
virtual void DoFoo(Bar* someBar) { cout << someBar->DoBar() << endl;
};
};
#endif
-- Foo.cpp --
#include "Foo.h"
-- swig.i --
%module test
%{
#include "Foo.h"
%}
%include "Foo.h"
-- UseFoo.py --
#!/usr/bin/env python
from test import *;
class ExtendedBar(Bar):
def __init__(self):
Bar.__init__(self);
def DoBar(self):
return "ExtendedBar";
bar = ExtendedBar();
foo = Foo();
foo.DoFoo(bar);
------------
I now expect to get "ExtendedBar" as output from UseFoo.py (since I've
declared DoBar() as virtual, but I get "Bar".... I'm using SWIG 1.3.1
to create the bindings from Python to C++. (swig -python -c++)
Can anyone tell me why? Is there a way to remedy this??
Thx,
Lars Moastuen
extended class in a C++ call... I made an example to clarify:
-- Foo.h --
#ifndef FOO_H
#define FOO_H
#include <iostream>
using namespace std;
class Foo;
class Bar;
class Bar
{
public:
Bar() {};
~Bar() {};
virtual char* DoBar() const { return "Bar"; };
};
class Foo
{
public:
Foo() {};
~Foo() {};
virtual void DoFoo(Bar* someBar) { cout << someBar->DoBar() << endl;
};
};
#endif
-- Foo.cpp --
#include "Foo.h"
-- swig.i --
%module test
%{
#include "Foo.h"
%}
%include "Foo.h"
-- UseFoo.py --
#!/usr/bin/env python
from test import *;
class ExtendedBar(Bar):
def __init__(self):
Bar.__init__(self);
def DoBar(self):
return "ExtendedBar";
bar = ExtendedBar();
foo = Foo();
foo.DoFoo(bar);
------------
I now expect to get "ExtendedBar" as output from UseFoo.py (since I've
declared DoBar() as virtual, but I get "Bar".... I'm using SWIG 1.3.1
to create the bindings from Python to C++. (swig -python -c++)
Can anyone tell me why? Is there a way to remedy this??
Thx,
Lars Moastuen