coder.ClassType class

Пакет: coder
Суперклассы: 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