Перечисление с типом данных в WindRiver Workbench 3.3

В Visual Studio 2010 я смог построить перечисление с типом данных просто отлично.

enum FRUIT_E : UINT16
{
APPLE = 0,
LEMON = 1,
GRAPE = 2,
};

Однако, когда я пытался скомпилировать в WR Workbench, я получаю следующую ошибку:

: ошибка: использование enum ‘FRUIT_E’ без предварительного объявления

Мне действительно нужно указать тип данных enum, поскольку поля упакованы в битовый формат. Есть ли способ, которым я мог бы явно указать тип перечисления?

1

Решение

Краткий ответ на ваш вопрос — нет.

Возможность определения базового типа для перечислений — это языковая функция, которая не была добавлена ​​до C ++ 11 (http://en.cppreference.com/w/cpp/language/enum). К сожалению, WindRiver не спешил поддерживать компиляторы, которые соответствуют современным стандартам C ++ (C ++ 11 в vxworks). Есть упоминание о поддержке C ++ 11 в коммерческих версиях g ++ для VxWorks 7.0+ (https://stackoverflow.com/a/36311473). Но ваша версия WorkBench (<4.0) подразумевает, что это не поможет вам.

В вашей ситуации я мог бы объединить обходной путь, такой как этот:

namespace FRUIT_E
{
static const UINT16 APPLE = 0;
static const UINT16 LEMON = 1;
static const UINT16 GRAPE = 2;
}

typedef FRUIT_T UINT16;

...

FRUIT_T fruit = FRUIT_E::APPLE;

Однако это не обеспечит безопасность типов, поскольку FRUIT_T — это просто псевдоним для UINT16. Так что это далеко от идеала. Я добавил теги к вашему вопросу. Там могут быть лучшие обходные пути, более близко подражая желаемому поведению. Но добавление новой языковой функции, казалось бы, указывает на то, что существующие методы были неадекватными.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]