При создании кода с помощью codegen, чтобы указать тип ввода, который является объектом класса значений, можно предоставить пример объекта с помощью -args вариант.
Определите класс значений. Например, определите класс myRectangle.
classdef myRectangle properties length; width; end methods function obj = myRectangle(l,w) if nargin > 0 obj.length = l; obj.width = w; end end function area = calcarea(obj) area = obj.length * obj.width; end end end
Определите функцию, которая принимает объект класса значений в качестве входных данных. Например:
function z = getarea(r) %#codegen z = calcarea(r); end
Создайте объект класса.
rect_obj = myRectangle(4,5)
rect_obj =
myRectangle with properties:
length: 4
width: 5Передача объекта-примера в codegen с помощью -args вариант.
codegen getarea -args {rect_obj} -report
В отчете по созданию кода вы видите, что r имеет те же свойства, length и width, в качестве примера объекта rect_object. Свойства имеют тот же размер и тип, что и в примере объекта. rect_object.

Вместо предоставления объекта-примера можно создать тип для объекта класса значений, а затем предоставить типу -args вариант.
Создайте объект класса:
rect_obj = myRectangle(4,5)
rect_obj =
myRectangle with properties:
length: 4
width: 5Создание типа для объекта myRectangle который имеет те же типы свойств, что и rect_obj, использовать coder.typeof.
coder.typeof создает coder.ClassType объект, определяющий тип для класса.
t= coder.typeof(rect_obj)
t =
coder.ClassType
1×1 myRectangle
length: 1×1 double
width : 1×1 doubleПередать тип в codegen с помощью -args вариант.
codegen getarea -args {t} -report
После создания типа для класса значений можно изменить типы свойств. Например, чтобы сделать свойства t 16-битные целые числа:
t.Properties.length = coder.typeof(int16(1)) t.Properties.width = coder.typeof(int16(1))
Можно также добавить или удалить свойства. Например, для добавления свойства newprop:
t.Properties.newprop = coder.typeof(int16(1))
coder.ClassType Файл определения объекта и классаПри создании кода свойства coder.ClassType объект, который вы передаете codegen должны соответствовать свойствам в файле определения класса. Если файл определения класса имеет свойства, которые код не использует, coder.ClassType объект не должен включать эти свойства. Генератор кода удаляет неиспользуемые свойства.
Входы функций начального уровня, являющиеся объектами, имеют следующие ограничения:
Объект, являющийся вводом функции точки входа, должен быть объектом класса значений. Объекты классов дескрипторов не могут быть входами функций точки входа. Поэтому класс значений, содержащий класс дескриптора, не может быть вводом функции точки входа.
Объект не может быть глобальной переменной.
Если объект имеет повторяющиеся имена свойств, его нельзя использовать с coder.Constant. Повторяющиеся имена свойств встречаются в объекте подкласса в следующих ситуациях:
Подкласс имеет свойство с тем же именем, что и свойство суперкласса.
Подкласс является производным от нескольких суперклассов, использующих одно и то же имя для свойства.
Сведения о том, когда MATLAB ® допускает дублирование имен свойств, см. в разделе Подклассификация нескольких классов.