exponenta event banner

Задание объектов в качестве входных данных в командной строке

При создании кода с помощью codegen, чтобы указать тип ввода, который является объектом класса значений, можно предоставить пример объекта с помощью -args вариант.

  1. Определите класс значений. Например, определите класс 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

  2. Определите функцию, которая принимает объект класса значений в качестве входных данных. Например:

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

  3. Создайте объект класса.

    rect_obj = myRectangle(4,5)
    

    rect_obj = 
    
      myRectangle with properties:
    
        length: 4
         width: 5
  4. Передача объекта-примера в codegen с помощью -args вариант.

    codegen getarea -args {rect_obj} -report

    В отчете по созданию кода вы видите, что r имеет те же свойства, length и width, в качестве примера объекта rect_object. Свойства имеют тот же размер и тип, что и в примере объекта. rect_object.

Вместо предоставления объекта-примера можно создать тип для объекта класса значений, а затем предоставить типу -args вариант.

  1. Создайте объект класса:

    rect_obj = myRectangle(4,5)
    
    rect_obj = 
    
      myRectangle with properties:
    
        length: 4
         width: 5

  2. Создание типа для объекта 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

  3. Передать тип в 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 объект не должен включать эти свойства. Генератор кода удаляет неиспользуемые свойства.

Ограничения для использования объектов в качестве входных данных функции точки входа

Входы функций начального уровня, являющиеся объектами, имеют следующие ограничения:

  • Объект, являющийся вводом функции точки входа, должен быть объектом класса значений. Объекты классов дескрипторов не могут быть входами функций точки входа. Поэтому класс значений, содержащий класс дескриптора, не может быть вводом функции точки входа.

  • Объект не может быть глобальной переменной.

  • Если объект имеет повторяющиеся имена свойств, его нельзя использовать с coder.Constant. Повторяющиеся имена свойств встречаются в объекте подкласса в следующих ситуациях:

    • Подкласс имеет свойство с тем же именем, что и свойство суперкласса.

    • Подкласс является производным от нескольких суперклассов, использующих одно и то же имя для свойства.

    Сведения о том, когда MATLAB ® допускает дублирование имен свойств, см. в разделе Подклассификация нескольких классов.

См. также

Связанные темы