Haoyu Bai | 1 Jul 15:15 2010

Re: [Cython] Some c++ bugs

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. :)


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