Если вы генерируете код при помощи 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® позволяет создавать повторяющиеся имена свойства, см. Раздел «Подклассы нескольких классов».