exponenta event banner

класс coder.ClassType

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

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

Описание

Задает набор объектов класса значений, которые может принять созданный код. Использовать только с codegen -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