[PyQt] how to wrap anonymous enums

Phil Thompson phil at riverbankcomputing.com
Mon Aug 31 22:36:37 BST 2009


On Mon, 31 Aug 2009 23:07:54 +0200, "Diez B. Roggisch" <deets at web.de>
wrote:
> Phil Thompson schrieb:
>> On Sat, 29 Aug 2009 19:43:24 +0200, "Diez B. Roggisch" <deets at web.de>
>> wrote:
>>> Phil Thompson schrieb:
>>>> On Sat, 29 Aug 2009 17:48:11 +0200, "Diez B. Roggisch" <deets at web.de>
>>>> wrote:
>>>>> Hi,
>>>>>
>>>>> I've got a struct like this:
>>>>>
>>>>> struct SJoystickInfo {
>>>>> 	u8				Joystick;
>>>>> 	u32				Buttons;
>>>>> 	u32				Axes;
>>>>> 	enum
>>>>> 	{
>>>>> 		//! A hat is definitely present.
>>>>> 		POV_HAT_PRESENT,
>>>>>
>>>>> 		//! A hat is definitely not present.
>>>>> 		POV_HAT_ABSENT,
>>>>>
>>>>> 		//! The presence or absence of a hat cannot be determined.
>>>>> 		POV_HAT_UNKNOWN
>>>>> 	} PovHat;
>>>>> }; // struct SJoystickInfo
>>>>>
>>>>> So the type of PovHat is an anonymous enum. How to wrap that? I also 
>>>>> tried to just give PovHat an int-value, but that didn't work either.
>>>> It should just work - what problem are you seeing?
>>> A simple syntax eror at the line of "PovHat".
>> 
>> Hmm - one for the TODO list.
>> 
>> The workaround is what I think you tried...
>> 
>> enum
>> {
>>     //! A hat is definitely present.
>>     POV_HAT_PRESENT,
>> 
>>     //! A hat is definitely not present.
>>     POV_HAT_ABSENT,
>> 
>>     //! The presence or absence of a hat cannot be determined.
>>     POV_HAT_UNKNOWN
>> };
>> 
>> int PovHat;
>> 
>> ...so what problem did you have with that?
> 
> This is in my sip-file:
> 
>    enum
>      {
>        POV_HAT_PRESENT,
>        POV_HAT_ABSENT,
>        POV_HAT_UNKNOWN
>      };
> 
> struct SJoystickInfo
> {
>    irr::u8 Joystick;
>    irr::core::stringc Name;
>    irr::u32 Buttons;
>    irr::u32 Axes;
>    int PovHat;
> };
> 
> 
> This is the compiler error:
> 
> sipirrlichtirrSJoystickInfo.cpp: In function ‘int 
> varset_irr_SJoystickInfo_PovHat(void*, PyObject*, PyObject*)’:
> sipirrlichtirrSJoystickInfo.cpp:215: error: invalid conversion from 
> ‘int’ to ‘irr::SJoystickInfo::<anonymous enum>’
> error: command 'gcc-4.2' failed with exit status 1

Maybe the lack of support for anonymous enums was intentional because of
the casting problem.

The only thing I can think of at the moment is to implement %SetCode for
"int PovHat" to do whatever hackery is needed to work around the casting
problem (eg. a switch statement assigning each possible value explicitly).

Phil


More information about the PyQt mailing list