[C++-sig] Problem with extracting a C++ object from python

Matt mjkeyes at sbcglobal.net
Fri Oct 28 16:48:54 CEST 2005


Ack, that didn't work.  I imagine I have to set a converter somehow, but I 
can't find any tutorials on it.

Can someone help?

"Matt" <mjkeyes at sbcglobal.net> wrote in message 
news:djsm8b$a01$1 at sea.gmane.org...
> Okay, I think I'm an idiot here.  Python doesn't know the first thing 
> about the base class (I'm guessing), so I'll have to expose that.
>
> Can anyone verify this?  I won't be able to try it until tomorrow.  Also, 
> a code review of the concepts illustrated in my pseudocode below is always 
> appreciated :)
>
> Thanks!
>
> "Matt" <mjkeyes at sbcglobal.net> wrote in message 
> news:djslcp$7fb$1 at sea.gmane.org...
>> Hi all,
>>
>> Here's some sample code of what I'm trying to do:
>>
>> class Base
>> {
>> public:
>>    Base() {}
>>    virtual ~Base() {}
>> };
>>
>> class Derived : public Base
>> {
>> public:
>>    Derived() {}
>>    virtual ~Derived() {}
>>
>>    virtual void DoSomething() {}
>> };
>>
>> Elsewhere:
>> class MyUtility
>> {
>>    static object ms_oDerived;
>>    static Derived * ms_pDerived;
>>
>>    public:
>>    static Derived * GetDerived() {return ms_pDerived;}
>>
>>    static void SetDerived(handle <>hDerived)
>>    {
>>        try
>>        {
>>            ms_oDerived = object(hDerived);
>>            ms_pDerived = extract<Base*>(ms_oDerived);
>>            ms_pDerived->DoSomething();
>>        }
>>        catch(...)
>>        {
>>            PyErr_Print();
>>        }
>>    }
>> };
>>
>> BOOST_PYTHON_MODULE(MyModule)
>> {
>>    class_<Derived, boost::noncopyable>("PyDerived");
>>
>>    def("PySetDerived",    &MyUtility::SetDerived);
>> }
>>
>> In Python:
>>
>> import MyModule
>>
>> def Foo():
>>    MyModule.PySetDerived(MyModule.PyDerived())
>>
>> When I run my code (which mimics the above), I get an error on the 
>> extract<Base*>... line:
>>
>> "TypeError: No registered converter was able to extract a C++ pointer to 
>> type class Base from this Python object of type PyDerived"
>>
>> Any advice on this?
>>
>> Thanks! 






More information about the Cplusplus-sig mailing list