Dag Sverre Seljebotn | 1 Jul 14:43 2010

Re: [Cython] Some c++ bugs

Haoyu Bai wrote:
> On Thu, Jul 1, 2010 at 6:09 PM, toki doki <tokidokix@...> wrote:
>> Hi,
>> I have been trying to use cython-devel with c++ and ran into the
>> following bugs (that seem to be unreported as far as I can say from a
>> quick glance at Trac).
>> First, and most annoying: in spite of what is written in the docs
>> (http://wiki.cython.org/WrappingCPlusPlus), nested c++ class
>> declarations seem to be unsupported. Thus, the following snippet
>> (taken from the doc) for wrapping std::vector does not work and raise
>> a syntax error:
>> cdef extern from "<vector>" namespace "std":
>>    cdef cppclass vector[T]:
>>        cdef cppclass iterator:
>>            T operator*()
>>            iterator operator++()
>>        vector()
>>        void push_back(T&)
>>        T& operator[](int)
>>        iterator begin()
>>        iterator end()
> Refer to Cython/Includes/libcpp/vector.pxd for a example of nested class:
> cdef extern from "<vector>" namespace "std":
>     cdef cppclass vector[T]:
>         cppclass iterator:
>             T& operator*()
>             iterator operator++()
>             iterator operator--()
>             bint operator==(iterator)
>             bint operator!=(iterator)
>         ...
>> Second: ctypedef'ing templated types raises a syntax Error (for
>> example: "ctypedef vector[int] VectOfInt" ).
>> It would be nice if these two problems were solved for the cython0.13
>> release (or even before that, for those of us that dare to use
>> cython-devel :-)
>> Anyway, congratulations on a great  and useful project. It (and before
>> that, good old pyrex too) has been very useful for me during the years
>> of my PhD. Can't wait for full c++ and generators support :-)
>> Toki
> For your second issue, I have a patch that let you do "cdef cppclass
> VectOfInt(vector[int]): pass" (which is also not supported by
> cython-devel yet), which would get the same effect as ctypedef. See
> the attached file. The patch is not thoroughly tested yet. Feel free
> to take it and improve it if you are interested.
I thought we only supported "cppclass" only in extern blocks, i.e. we 
don't ever emit code from Cython to create C++ classes?

Dag Sverre