Re: opaque types, constructors, assignment - help please
Stefan Behnel <[email protected]> Thu, 25 Feb 2010 21:36:08 +0100
| Newsgroups | gmane.comp.python.pyrex |
|---|---|
| Message-ID | <[email protected]> |
Jose Nazario, 25.02.2010 18:04: > trying to get the following code to work: > = > cdef extern from "../src/capi.h": > ctypedef extern struct FastBitQueryHandle > .... > FastBitQueryHandle fastbit_build_query(char *selectClause, char > *indexLocation, char *queryConditions) > .... > = > class Query: > # The Query class holds queries over the FastBit data set > def __init__(self, selectClause, indexLocation, queryConditions): > self.qh =3D <FastBitQueryHandle>fastbit_build_query(selectClause, > indexLocation, queryConditions) > = > not surprisingly i get an assignment error: > = > /var/home/jose/fastbit-ibis1.1.6/python/fastbit.pyx:235:18: Cannot > convert 'FastBitQueryHandle' to Python object > = > = > FastBitQueryHandle is a complex C++ object, easier to leave it opaque You are trying to assign a C++ object to a Python object attribute. This requires a conversion to a Python object, which obviously fails. Instead, use a cdef class that has a cdef attribute of the C++ type. Note that Cython 0.13 will have much better support for C++ classes. See he= re: http://wiki.cython.org/enhancements/cpp This will make it a lot easier to handle C++ objects. You can get a developer version with the described features from here: http://hg.cython.org/cython-devel Stefan