[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