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.
There's some extra C++ support you need to do. At the top of your .pyx file, add
from libcpp cimport bool
I'd take a look inside that to find the other things you might need, like std::string and STL containers
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With