[Pyrex] C++ issue

Ravi Lanka ravi_lanka at acusim.com
Mon Apr 28 20:49:23 CEST 2008


Robert,

    Are you suggesting something like;

cdef foo* fooPtr
fooPtr = &(b.getFoo())

With the code above, I get "Taking address of a non-lvalue" error.

Ravi

Robert Bradshaw wrote:
> In this case you might want to declare your variable to be *pointers* 
> to the given classes, rather than the classes themselves. This will 
> prevent c++ from trying to create them directly where the are declared 
> (though you will then have to manually delete them when you're done 
> with them).
>
> - Robert
>
> On Apr 28, 2008, at 9:26 AM, Ravi Lanka wrote:
>> Pyrex gurus,
>>
>>   I am trying to wrap a C++ library and have been successful for the
>> most part (thanks to you guys).  One of the classes that I need to wrap
>> does not contain a default constructor (see code below ).  The cpp file
>> that gets created complains that "foo" does not contain a default
>> constructor [ cdef foo f  is invalid ].  At the same time, I cannot say
>> "cdef foo f = b.getFoo()". My solution was to build the cpp file from
>> the pyrex code below and then create a line that says;
>>
>> cdef foo f = b.getFoo() instead of  "f = b.getFoo",
>>
>> and remove the initial declaration.  It works for what I am doing, but I
>> am afraid that there could be some reference count issues.
>> Unfortunately, the argument required by the constructor of foo class is
>> neither required nor available in my wrapper code.
>>
>> Any Ideas ?
>> thanks in advance.
>>
>> Ravi
>>
>> ------------------
>> class foo {
>>     public:
>>         foo( templatedClassObject  unAvailable );
>>         int (*getItems) { return 1; }
>> };
>>
>> class bar {
>>     public:
>>         bar();
>>         foo& getFoo() { return fooObj; }
>> };
>>
>> pyrex:
>>
>> cdef extern from "foo.h":
>>     ctypedef struct foo "foo":
>>         int (*getItems)()
>>
>> cdef extern from "bar.h":
>>     ctypedef struct bar "bar":
>>         foo (*getFoo)()
>>
>>     bar *barFactory "new bar"()
>>     void deleteBar "delete "(bar *barObj)
>>
>> def test():
>>     cdef    bar   b
>>     cdef    foo   f
>>     ### b is populated through some calculations here
>>     f = b.getFoo()
>> -------------------------
>>
>>
>> _______________________________________________
>> Pyrex mailing list
>> Pyrex at lists.copyleft.no
>> http://lists.copyleft.no/mailman/listinfo/pyrex
>
>




More information about the Pyrex mailing list