cython issue: 'bool' is not a type identifier
c++, cython, python
Solution
I have found a valid workaround, although it may not be optimal.
I have replaced the members types of the `pytest` class with python lists.
The conversion is now done implicitly, as described in the documentation: https://docs.cython.org/en/latest/src/userguide/wrapping_CPlusPlus.html#standard-library
All conversions create a new container and copy the data into it. The items in the containers are converted to a corresponding type automatically, which includes recursively converting containers inside of containers, e.g. a C++ vector of maps of strings.
So now, my class looks like this:
cdef class pyTest:
cdef Test* thisptr
cdef public list test_fail #now ok
cdef public list test_ok
cdef __cinit__(self):
self.thisptr = new Test()
self.test_fail = self.thisptr.test_fail # implicit copy & conversion
self.test_ok = self.thisptr.test_ok # implicit copy and conversion
cdef __dealloc__(self):
del self.thisptr
Problem
I'm desperately trying to expose a `std::vector<bool>` class member to a Python class. Here is my C++ class: ``` class Test { public: std::vector<bool> test_fail; std::vector<double> test_ok; }; ``` While the access and conversion of `test_ok` of type `double` (or int, float, ..) works, it does not for `bool`! Here is my Cython class: ``` cdef class pyTest: cdef Test* thisptr cdef public vector[bool] test_fail cdef public vector[double] test_ok cdef __cinit__(self): self.thisptr = new Test() self.test_fail = self.thisptr.test_fail # compiles and works if commented self.test_ok = self.thisptr.test_ok cdef __dealloc__(self): del self.thisptr ``` The error I get is : ``` Error compiling Cython file: ------------------------------------------------------------ ... cdef extern from *: ctypedef bool X 'bool' ^ ------------------------------------------------------------ vector.from_py:37:13: 'bool' is not a type identifier ``` I'm using python 2.7.6 and Cython 0.20.2 (also tried 0.20.1). I also tried with properties but it does not work either. Addendum: I do have the `from libcpp cimport bool` at the top of my pyx file, as well as the vector import. What's wrong ?? I believe this might be a bug. Anyone knows how to circumvent this ? Thanks.