[C++-sig] Re: Problem: held type, std::auto_ptr, ReferenceErrors.
Nicodemus
nicodemus at globalite.com.br
Tue Aug 26 02:27:09 CEST 2003
David Abrahams wrote:
>Prabhu Ramachandran <prabhu at aero.iitm.ernet.in> writes:
>
>
>> DA> struct Foo_Wrapper : Foo {
>> DA> Foo_Wrapper(PyObject* self)
>> DA> : m_self(self) {}
>>
>> DA> Foo* f() {
>> DA> object self(handle<>(borrowed(m_self)));
>> DA> return extract<Foo*>(self.attr("f")());
>> DA> }
>> DA> PyObject* m_self;
>> DA> };
>>
>>Yes, that is possible but I'm using Pyste. Maybe we need another hook
>>to insert code there?
>>
>>
>
>I guess that's up to Nicodemus.
>
>
You can do that already, you just have to write a wrapper for f. Here's
an example:
---------------- foo.h:
struct Foo
{
virtual int f() { return 0; }
};
--------------- foo.pyste
Include('iostream')
f_wrapper = Wrapper('f_wrapper',
'''
int f_wrapper(Foo *foo) {
std::cout << "f!" << std::endl;
return foo->Foo::f();
}
''')
Foo = Class('Foo', 'foo.h')
set_wrapper(Foo.f, f_wrapper)
Will generate this:
int f_wrapper(Foo *foo) {
std::cout << "f!" << std::endl;
return foo->Foo::f();
}
namespace {
struct Foo_Wrapper: Foo
{
...
int f() {
return call_method< int >(self, "f");
}
int default_f() {
return f_wrapper(this);
}
...
};
But perhaps this is not enough, since the method in the original post
needed to access the PyObject* of the Wrapper class. Is it possible to
get the PyObject* given a Foo instance?
Regards,
Nicodemus.
More information about the Cplusplus-sig
mailing list