主要内容

MATLAB类定义代码生成

为MATLAB生成有效的独立的代码®类,您必须使用类不同运行时代码在MATLAB环境中。

有什么不同 更多的信息
限制的语言特性。 语言的限制
限制的代码生成功能。 代码生成功能不兼容的类
定义类的属性。 定义类的属性代码生成
处理类的使用。

为MATLAB处理类和系统对象生成代码

代码生成处理类析构函数

为代码生成处理对象的局限性

不支持全局变量包含MATLAB处理对象的代码生成。金宝app N /一个
不支持从内置的MATLAB类继承。金宝app 不支持继承从内置的MATLAB类金宝app

语言的限制

虽然提供了代码生成支持等共同特征的类的属性和方法,金宝app有许多高级功能不支持,如:

  • 事件

  • 听众

  • 对象的数组

  • 递归数据结构

    • 链表

  • 嵌套函数构造函数

  • Overloadable运营商subsref,subsassign,subsindex

    在MATLAB中,类可以定义自己的版本的subsref,subsassign,subsindex方法。代码生成不支持这些方法的类,都有自己的定义。金宝app

  • 方法

    在MATLAB中,类有一个内置的静态方法,创建一个空数组的类。代码生成不支持这个方法。金宝app

  • 以下的MATLAB处理类方法:

    • addlistener

    • 情商

    • findobj

    • findpro

  • AbortSet属性的属性

代码生成功能不兼容的类

  • 您可以生成代码入口点MATLAB函数使用类,但你不能直接生成代码一个MATLAB类。

    例如,如果ClassNameA是一个类的定义,不能生成代码的执行:

    codegen ClassNameA

  • 一个句柄类对象不能被一个入口点函数的输入或输出。

  • 一个值类对象可以是一个入口点函数的输入或输出。然而,如果一个值类对象包含一个处理类对象,然后类对象的值不能被一个入口点函数的输入或输出。一个句柄类对象不能被一个入口点函数的输入或输出。

  • 代码生成不支持处理类的全局变量。金宝app

  • 代码生成不支持指定的对象类成nontunable属金宝app性的值。例如,obj.prop = v;时是无效的道具是nontunable财产和v基于类值是一个对象。

  • 你不能使用coder.extrinsic声明一个类或方法是外在。

  • 你不能通过MATLAB类coder.ceval。你可以通过类属性coder.ceval

  • 如果一个属性的get方法,一组方法,或验证器,或者是一个系统对象™财产与某些属性,那么你不能通过财产通过引用一个外部函数。看到按引用传递一些属性的不支持金宝app

  • 如果一个对象有重复的属性名称和代码生成器试图constant-fold对象,代码生成可以失败。代码生成器constant-folds对象时使用coder.Constantcoder.const,或者当它是一个输入或输出从constant-folded外在功能。

    重复的属性名称出现在一个子类的对象在这些情况下:

    • 子类的属性相同的名称作为一个超类的属性。

    • 的子类来源于多个超类使用相同名称的属性。

    信息在MATLAB允许重复的属性名称,明白了子类化多个类

定义类的属性代码生成

对于代码生成,您必须定义类的属性不同于你在运行代码在MATLAB环境中:

  • 墨西哥人功能验证报告错误而导致的属性。独立的C / c++代码报告这些错误只有在启用运行时错误报告。看到生成独立的C / c++代码检测和报告运行时错误。之前生成独立的C / c++代码,这是一个最佳实践测试属性验证通过运行一个墨西哥人的功能完整的输入值的范围。

  • 在定义属性之后,不给它一个不兼容的类型。不要使用一个属性之前它生长。

    当你为代码生成定义类的属性,考虑相同的因素你考虑当定义变量。在MATLAB语言中,变量可以改变他们的阶级,大小,或者在运行时动态复杂性所以可以使用相同的变量来保存一个值不同的阶级,大小或复杂性。C和c++使用静态类型。在使用变量之前,确定其类型,每个变量代码生成器需要完成的任务。同样,在使用属性之前,您必须显式地定义自己的类,大小和复杂性。

  • 初始值:

    • 如果属性没有显式的初始值,代码生成器假定它是未定义的构造函数。代码生成器不赋一个空矩阵作为默认。

    • 如果属性没有一个初始值和财产分配的代码生成器不能确定在第一次使用之前,软件生成一个编译错误。

    • 系统对象的,如果一个nontunable属性是一个结构,你必须完全分配结构。你不能做部分使用加下标赋值。

      例如,对于nontunable属性,您可以使用以下任务:

      mySystemObject.nonTunableProperty =结构(‘基坑’,‘‘,‘fieldB’, ' b ');

      你不能使用以下部分作业:

      mySystemObject.nonTunableProperty。基坑= ' a ';mySystemObject.nonTunableProperty。fieldB = ' b ';

    • coder.varsize不支持类的属性金宝app。

    • 如果一个属性的初始值是一个对象,那么财产必须是常数。使房地产常数,声明常数属性在属性块。例如:

      classdefMyClass属性(恒)p1 = MyClass2;结束结束

    • MATLAB计算类初始值在类加载时间代码生成。如果你在MATLAB类属性初始化,使用持久变量的值时持久变量计算类加载属于MATLAB;这不是在代码生成时使用的值。如果你使用coder.target在MATLAB类属性初始化,coder.target (MATLAB)返回真正的(1)

  • 适应可变属性:

    • 代码生成支持上限和无界的适应值和金宝app处理类的属性。

    • 生成无限适应可变类属性,使动态内存分配。

    • 适应可变类属性,使两个顺序作业类的属性,一个一个标量和旁边一个数组。

      classdefvarSizeProp1 <处理属性道具varProp结束结束
      函数extFunc (n) obj = varSizeProp1;%分配一个标量值的属性。obj.prop= 1; obj.varProp = 1;%将数组分配给相同的属性使其大小可变的。obj.prop= 1:98; obj.varProp = 1:n;结束

      在前面的代码中,第一个任务道具varProp是标量,他们的第二个任务是使用相同的基本类型数组。的大小道具有一个上限的98年,这使得一个上限,适应可变属性。

      如果n在编译时是未知的,obj.varProp是一个无限适应可变属性。如果是已知的,这是一个上限,适应可变类属性。

    • 如果类属性与适应可变数组初始化,房地产是适应。

      classdefvarSizeProp2属性道具结束方法函数obj = varSizeProp2(不胀钢)%将传入的值分配给本地变量locVar =不胀钢;%声明局部变量大小可变的列%向量没有大小限制coder.varsize (“locVar”[正1],[1 0]);%分配值obj.prop= locVar;结束结束结束

      在前面的代码中,不胀钢传递给类构造函数并存储在吗locVarlocVar修改来适应coder.varsize并分配给类属性obj.prop,这使得房地产适应。

      • 如果输入的函数调用varSizeProp2适应,coder.varsize不是必需的。

        函数z = constructCall (n) z = varSizeProp2 (1: n);结束
      • 如果该值的n在编译时是未知的,没有指定的界限,z.prop是一个无限适应可变类属性。

      • 如果该值的n在编译时是未知的,指定的界限,z.prop是一个上限适应可变类属性。

  • 如果一个属性是常数,其值是一个对象,你不能改变这个对象的属性的值。例如,假设:

    • obj是一个对象的myClass1

    • myClass1有一个不变的属性p1这是一个对象myClass2

    • myClass2有一个属性p2

    代码生成不支持以下代码:金宝app

    obj.p1。p2 = 1;

从内置的继承MATLAB类不支持金宝app

你不能从内置的MATLAB生成代码类继承的类。例如,你不能生成下面的类的代码:

classdefmyclass <双

一个例外是MATLAB枚举类。您可以生成代码枚举类,继承内置MATLAB类。看到为枚举代码生成