coder.ClassType class

Пакет: кодер
Суперклассы: coder.ArrayType

Представляйте набор классов MATLAB

Описание

Задает набор объектов класса значения, которые может принять сгенерированный код. Используйте только с fiaccel -args опция. Не передавайте как вход сгенерированной MEX-функции.

Конструкция

Примечание

Можно также создать и отредактировать coder.Type объекты в интерактивном режиме при помощи Редактора типов Кодера. Смотрите Создают и Входные Типы Редактирования при помощи Редактора типов Кодера.

t = coder.typeof(value_class_object) создает coder.ClassType объект для объекта value_class_object.

t = coder.newtype(value_class_name) создает coder.ClassType объект для объекта класса value_class_name.

Входные параметры

value_class_object

Объект класса значения, из которого можно создать coder.ClassType объект. value_class_object выражение, которое оценивает к объекту класса значения. Например:

v = myValueClass;
t = coder.typeof(v);

t = coder.typeof(myValueClass(2,3));

value_class_name

Имя файла определения класса значения на пути MATLAB®. Задайте как вектор символов или строковый скаляр. Например:

t = coder.newtype('myValueClass');

Свойства

Когда вы создаете coder.ClassType объект t от объекта класса значения v при помощи coder.typeof, свойства t совпадают со свойствами v с атрибутом Constant установите на false.

Примеры

Создайте тип на основе объекта в качестве примера

Создайте тип на основе объекта в качестве примера в рабочей области.

Создайте класс значения 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

Создайте функцию, которая берет объект myRectangle как вход.

function z = getarea(r)
%#codegen
z = calcarea(r);
end

Создайте объект myRectangle.

v = myRectangle(1,2)
v = 

  myRectangle with properties:

    length: 1
     width: 2

Создайте coder.ClassType основанный на объектах на v.

t = coder.typeof(v)
t = 

coder.ClassType
   1×1 myRectangle   
      length: 1×1 double
      width : 1×1 double

coder.typeof создает coder.ClassType объект, который имеет те же имена свойств и типы как v имеет.

Сгенерируйте код для getarea. Задайте входной тип путем передачи coder.ClassType объект, t, к -args опция.

codegen getarea -args {t} -report

Создайте тип при помощи coder.newtype

Создайте coder.ClassType объект для объекта класса значения mySquare при помощи coder.newtype.

Создайте класс значения mySquare это имеет одно свойство, side.

classdef mySquare
    properties
        side;
    end
    methods
        function obj = mySquare(val)
            if nargin > 0
                obj.side = val;
            end
        end
        function a = calcarea(obj)
            a = obj.side * obj.side;
        end
    end
end

Создайте coder.ClassType введите для mySquare.

t = coder.newtype('mySquare')

Предыдущий шаг создает coder.ClassType введите для t, но не присваивает свойств mySquare к нему. Гарантировать t имеет все свойства mySquare, задайте тип side при помощи t.Properties.

t.Properties.side = coder.typeof(2)

Советы

  • После того, как вы создаете coder.ClassType, можно изменить типы свойств. Например:

    t = coder.typeof(myClass)
    t.Properties.prop1 = coder.typeof(int16(2));
    t.Properties.prop2 = coder.typeof([1 2 3]);

  • После того, как вы создаете coder.ClassType, можно добавить свойства. Например:

    t = coder.typeof(myClass)
    t.Properties.newprop1 = coder.typeof(int8(2));
    t.Properties.newprop2 = coder.typeof([1 2 3]);

  • Когда вы генерируете код, свойства coder.ClassType возразите, что вы передаете codegen должно быть сопоставимо со свойствами в файле определения класса. Однако, если файл определения класса имеет свойства, которые ваш код не использует, coder.ClassType объект не должен включать те свойства. Генератор кода удаляет свойства, которые вы не используете.

Введенный в R2017a