кодер. Класс ClassType

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

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

Описание

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

Конструкция

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.

Копировать семантику

Значение. Чтобы изучить, как классы значения влияют на операции копии, смотрите Копирование Объектов (MATLAB).

Примеры

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

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

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

Задайте тип side.

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

Была ли эта тема полезной?