[Cython] Problem with declaring a map with an enum type.

Brian McAndrews Brian.McAndrews at chicagotrading.com
Thu Jul 16 23:13:36 CEST 2015


I have a C enum type that I'm attempting to put in a C++ map:
Here's what I got:

colors.h:
enum Color
  {
    GREEN,BLUE,RED
  };

val.pyx:
from libcpp.string cimport string
from libcpp.map cimport map

cdef extern from "colors.h":
    cpdef enum _Color "Color":
       GREEN,BLUE,RED

cdef class TestMe:
    cdef public map[string, _Color] vals


I get a compile error (VSC++ 2012)
VAL.cpp(1239) : error C2440: '=' : cannot convert from 'long' to 'Color'
        Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast)

The offending statement is this:
    __pyx_t_9 = PyInt_AsLong(__pyx_v_value); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

In the __pyx_convert_map_from_py_std_3a__3a_string__and_enum__Color function.

The cast from PyInt_AsLong(...) to an enum Color is not specified when using maps.

If I don't put it in a map (just as a member variable), the cast is performed.

Has anyone seen this before?

Thanks,
Brian






This electronic mail message and any attached files contain information intended for the exclusive use of the individual or entity to whom it is addressed and may contain information that is proprietary, confidential and/or exempt from disclosure under applicable law. If you are not the intended recipient, you are hereby notified that any viewing, copying, disclosure or distribution of this information may be subject to legal restriction or sanction. Please notify the sender, by electronic mail or telephone, of any unintended recipients and delete the original message without making any copies.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cython-devel/attachments/20150716/a005cd60/attachment.html>


More information about the cython-devel mailing list