Haoyu Bai | 1 Jul 16:38 2010

Re: [Cython] Some c++ bugs

On Thu, Jul 1, 2010 at 9:15 PM, Haoyu Bai <baihaoyu <at> gmail.com> wrote:
> On Thu, Jul 1, 2010 at 8:43 PM, Dag Sverre Seljebotn
> <dagss <at> student.matnat.uio.no> wrote:
>> Haoyu Bai wrote:
>>> On Thu, Jul 1, 2010 at 6:09 PM, toki doki <tokidokix <at> gmail.com> 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
> Oh sorry, there should not be a ": pass", my mistake. :)

No, "cdef cppclass VectOfInt(vector[int]): pass" is valid inside a
extern block, which declares VectOfInt a class inherits vector[int]
but do not have any additional method. And that's not to emit code to
create a C++ class.


Haoyu BAI
School of Computing,
National University of Singapore.
Cython-dev mailing list
Cython-dev <at> codespeak.net