Если вы генерируете код при помощи 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
объект не должен включать те свойства. Генератор кода удаляет свойства, которые вы не используете.
Входные параметры функции точки входа, которые являются объектами, имеют эти ограничения:
Объект, который является входным параметром функции точки входа, должен быть объектом класса значения. Объекты классов Handle не могут быть входными параметрами функции точки входа. Поэтому класс значения, который содержит класс Handle, не может быть входным параметром функции точки входа.
Объект не может быть глобальной переменной.
Если объект имеет дублирующиеся имена свойства, вы не можете использовать его с coder.Constant
. Дублирующиеся имена свойства происходят в объекте подкласса в этих ситуациях:
Подкласс имеет свойство с тем же именем как свойство суперкласса.
Подкласс выводит из нескольких суперклассов, которые используют то же имя в свойстве.
Для получения информации о том, когда MATLAB® позволяет дублирующиеся имена свойства, смотрите Разделение на подклассы Нескольких Классов (MATLAB).