Перечисления представляют фиксированный набор именованных значений. Перечисления помогают сделать ваш MATLAB® код и сгенерированный более читаемый код C/C++. Например, сгенерированный код может протестировать равенство с кодом, таким как if (x == Red)
вместо того, чтобы использовать strcmp
.
Для генерации кода, когда вы используете перечисления, придерживаются этих ограничений:
Вызовы методов классов перечисления не поддерживаются.
Передача строк или векторов символов конструкторам перечислений не поддерживается.
Класс перечисления должен вывести из одного из этих базовых типов: int8
uint8
int16
uint16
, или int32
. Смотрите задают перечисления для генерации кода.
Можно использовать только ограниченный набор операций на перечислениях. Смотрите Позволенные Операции на Перечислениях.
Используйте перечисления с функциями, которые поддерживают перечислимые типы для генерации кода. Смотрите Функции Тулбокса MATLAB Та Поддержка Перечисления.
Для генерации кода класс перечисления должен вывести из одного из этих базовых типов: int8
uint8
int16
uint16
, или int32
. Например:
classdef PrimaryColors < int32 enumeration Red(1), Blue(2), Yellow(4) end end
Можно использовать базовый тип, чтобы управлять размером перечислимого типа в сгенерированном коде C/C++. Вы можете:
Представляйте перечислимый тип как целое число фиксированного размера, которое портативно к различным целям.
Уменьшайте использование памяти.
Интерфейс с унаследованным кодом.
Совпадайте со стандартами компании.
Представление перечислимого типа в сгенерированном коде C/C++ зависит от следующего:
Базовый тип перечисления MATLAB
Выходной язык (C или C++)
Если выходным языком является C++, стандарт выходного языка (C++ 03 или C++ 11)
Базовый тип является Нативным Целочисленным типом. Если базовый тип является нативным целочисленным типом для целевой платформы (например, int32
), генератор кода производит перечислимый тип C/C++. Рассмотрите это определение перечислимого типа MATLAB:
classdef LEDcolor < int32 enumeration GREEN(1), RED(2) end end
Если вы генерируете код С или C++ 03 кода, сгенерированное перечисление:
enum LEDcolor { GREEN = 1, RED };
Если вы генерируете C++ 11 кодов, сгенерированное перечисление явным образом задает базовый тип:
enum LEDcolor : int { GREEN = 1, RED };
Базовый тип Отличается от Нативного Целочисленного типа. Предположим, что встроенный целочисленный базовый тип для перечисления отличается от нативного целочисленного типа для целевой платформы. Например, рассмотрите это определение перечислимого типа MATLAB:
classdef LEDcolor < int16 enumeration GREEN(1), RED(2) end end
Если вы генерируете код С, генератор кода производит typedef
оператор для перечислимого типа и #define
операторы для перечисляемых значений. Например, определение перечислимого типа LEDcolor
производит этот код С:
typedef short LEDcolor; #define GREEN ((LEDcolor)1) #define RED ((LEDcolor)2)
Если вы генерируете C++ 03 кода, члены перечисления преобразованы в константы. Эти константы принадлежат пространству имен, которое содержит определение перечисляемого типа в сгенерированном Коде С++.
Например, предположите, что вы помещаете определение перечислимого типа LEDcolor
в пакете pkg
. Поведение по умолчанию генератора кода должно преобразовать пакеты MATLAB в пространства имен C++. Сгенерированный Код С++ помещается в пространстве имен pkg
:
namespace pkg { typedef short LEDcolor; // enum pkg_LEDcolor const LEDcolor GREEN{1}; const LEDcolor RED{2}; }
C++ 11 позволяет вам задавать базовый тип перечисления, точно так же, как MATLAB делает. Если вы генерируете C++ 11 кодов, класс перечисления MATLAB преобразован в перечисление C++, которое явным образом задает базовый тип.
Например, предположите, что вы помещаете определение перечислимого типа LEDcolor
в пакете pkg
. Поведение по умолчанию генератора кода должно преобразовать пакеты MATLAB в пространства имен C++. Сгенерированный C++ 11 кодов помещается в пространстве имен pkg
:
namespace pkg { enum LEDcolor : short { GREEN = 1, // Default value RED }; }
Тип C/C++ в typedef
оператор или базовый тип C++ 11 перечислений зависят от:
Целочисленные размеры, заданные для производственного оборудования в аппаратной реализации, возражают или настройки проекта. Смотрите coder.HardwareImplementation
.
Установка, которая определяет использование встроенных типов C или MathWorks® определения типов в сгенерированном коде. Смотрите Задают Типы данных, Используемые в Сгенерированном коде и Отображении Типы MATLAB к Типам в Сгенерированном коде.
Для генерации кода вы ограничиваетесь операциями на перечислениях, перечисленных в этой таблице.
Операция | Пример | Примечания |
---|---|---|
оператор присваивания: |
xon = LEDcolor.GREEN xoff = LEDcolor.RED |
— |
операторы отношения: |
xon == xoff |
Генерация кода не поддерживает использование |
бросьте операцию |
double(LEDcolor.RED) |
— |
преобразование в символьный массив или строку |
y = char(LEDcolor.RED); y1 = cast(LEDcolor.RED,'char'); y2 = string(LEDcolor.RED); |
|
индексация операции |
m = [1 2] n = LEDcolor(m) p = n(LEDcolor.GREEN) |
— |
операторы управления: если, переключатель, в то время как |
if state == sysMode.ON led = LEDcolor.GREEN; else led = LEDcolor.RED; end |
— |
Для генерации кода можно использовать перечисления с этими функциями тулбокса MATLAB: