On Thu, Jul 1, 2010 at 9:15 PM, Haoyu Bai <[email protected]> wrote: > On Thu, Jul 1, 2010 at 8:43 PM, Dag Sverre Seljebotn > <[email protected]> wrote: >> Haoyu Bai wrote: >>> On Thu, Jul 1, 2010 at 6:09 PM, toki doki <[email protected]> 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 [email protected] http://codespeak.net/mailman/listinfo/cython-dev
