Перечисления представляют фиксированный набор именованных значений. Перечисления помогают сделать код MATLAB ® более удобочитаемым.
При создании кода при использовании перечислений соблюдайте следующие ограничения:
Вызовы методов классов перечисления не поддерживаются.
Передача строк или векторов символов конструкторам перечислений не поддерживается.
Класс перечисления должен быть производным от одного из следующих базовых типов: int8, uint8, int16, uint16, или int32. См. раздел Определение перечислений для создания кода.
Для перечислений можно использовать только ограниченный набор операций. См. раздел Разрешенные операции с перечислениями.
Используйте перечисления с функциями, поддерживающими перечисляемые типы для создания кода. См. раздел Функции панели инструментов MATLAB, поддерживающие перечисления.
Для создания кода класс перечисления должен быть производным от одного из следующих базовых типов: int8, uint8, int16, uint16, или int32. Например:
classdef PrimaryColors < int32 enumeration Red(1), Blue(2), Yellow(4) end end
При использовании MATLAB Coder™ для создания кода C/C + + можно использовать базовый тип для управления размером перечисляемого типа в создаваемом коде. Вы можете:
Представление перечисляемого типа в виде целого числа фиксированного размера, переносимого на другие целевые объекты.
Сократите использование памяти.
Интерфейс с устаревшим кодом.
Соответствие стандартам компании.
Базовый тип определяет представление перечисляемого типа в сгенерированном коде C/C + +.
Если базовый тип является собственным целым типом для целевой платформы (например, int32), генератор кода создает перечисляемый тип C/C + +. Рассмотрим это определение перечисляемого типа MATLAB:
classdef LEDcolor < int32 enumeration GREEN(1), RED(2) end end
Это определение перечисляемого типа приводит к следующему коду C/C + +:
enum LEDcolor
{
GREEN = 1,
RED
};
typedef enum LEDcolor LEDcolor;
Для встроенных целочисленных базовых типов, которые отличаются от собственного целочисленного типа для целевой платформы:
При генерации кода C генератор кода создает typedef оператор для перечисляемого типа и #define операторов для перечисленных значений. Рассмотрим это определение перечисляемого типа MATLAB:
classdef LEDcolor < int16 enumeration GREEN(1), RED(2) end end
typedef short LEDcolor; #define GREEN ((LEDcolor)1) #define RED ((LEDcolor)2)
При создании кода C++ элементы перечисления преобразуются в константы. Эти константы принадлежат пространству имен, содержащему определение типа перечисления в сгенерированном коде C++.
Например, предположим, что это определение перечисляемого типа MATLAB помещено в пакет pkg:
classdef LEDcolor < int16 enumeration GREEN(1), RED(2) end end
pkg:namespace pkg {
typedef short LEDcolor;
// enum pkg_LEDcolor
const LEDcolor GREEN{1};
const LEDcolor RED{2};
}Тип C/C + + в typedef оператор зависит от:
Целочисленные размеры, определенные для производственного оборудования в объекте реализации оборудования или параметрах проекта. Посмотрите coder.HardwareImplementation (Кодер MATLAB).
Параметр, определяющий использование встроенных типов C или типов MathWorks ® в создаваемом коде. См. разделы Определение типов данных, используемых в сгенерированном коде (кодер MATLAB) и Сопоставление типов MATLAB типам в сгенерированном коде (кодер 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, switch, while |
if state == sysMode.ON
led = LEDcolor.GREEN;
else
led = LEDcolor.RED;
end |
— |
Для создания кода можно использовать перечисления со следующими функциями панели инструментов MATLAB: