将带有OO语法的Matlab转换为c / c ++,而无需重写其function

我有使用OO语法的Matlab代码 ,我需要将其转换为C / C ++源代码 (不是二进制而是源代码)。

我已经阅读了有关Level 2 S-Functions和使用Simulink Coder但是

  • 编写TLC用于“完全内联”TLC (不希望重写TLC中的完整例程)

    要么

  • 在TLC中使用“基于函数的包装器” (不希望在C文件中实现例程)

不符合我的要求。

是否有其他选项可以从Matlab代码生成C / C ++源代码?

可以从OO编写的Matlab脚本生成C代码。 但是有必要围绕对象包装函数。 你需要有Matlab Coder。

Matlab区分了Value Classes和Handle Classes(所有来自handle的类)。

1.处理类

1.1。 例

classdef myHandleClass < handle properties (Access=private) num1; end methods (Access=public) function obj = myHandleClass (num1) % constructor if(nargin > 0) obj.num1=num1; end end function prod = product(obj, factor) prod = obj.num1.*factor; end function quot = quotient(obj,divisor) quot = obj.num1/divisor; end end end 

1.2。 使用Handle Class的function

myHandleClass的对象需要持久化。 此外,isemptyfunction是强制性的。

  %#codegen function prod= use_product_HandleClass(a,b) assert(isa(a,'double')); assert(isa(b,'double')); persistent p; if isempty(p) p = myHandleClass(a); end prod = p.product(b); end 

1.3。 生成的代码

这是生成的“use_product_HandleClass.c”中最有趣的部分。

 typedef struct { real_T num1; } myHandleClass; #endif /*typedef_myHandleClass*/ /* Named Constants */ /* Variable Declarations */ /* Variable Definitions */ static myHandleClass p; /* Function Declarations */ /* Function Definitions */ real_T use_product_HandleClass(real_T a, real_T b) { if (!p_not_empty) { p.num1 = a; p_not_empty = TRUE; } return p.num1 * b; } 

2.价值类

2.1。 值类的示例

  classdef myValueClass properties (Access=private) num1; end methods (Access=public) function obj = myValueClass (num1) if(nargin > 0) obj.num1=num1; end end function prod = product(obj, factor) prod = obj.num1.*factor; end function quot = quotient(obj,divisor) quot = obj.num1./divisor; end end end 

2.2。 使用Value Class的function

 %#codegen function res= use_product_ValueClass(a,b) assert(isa(a, 'double')) assert(isa(b, 'double')) p = myValueClass(a); res = p.product(b); end 

2.3。 生成的代码

这是生成的“use_product_ValueClass.c”中最有趣的部分。

 /* Function Definitions */ real_T use_product_ValueClass(real_T a, real_T b) { return a * b; } 

3.参考文献

“为MATLAB值类生成代码”。
http://www.mathworks.de/de/help/coder/ug/how-to-generate-code-for-matlab-value-classes.html

“为MATLAB句柄类和系统对象生成代码”。

http://www.mathworks.de/de/help/coder/ug/how-to-generate-code-for-matlab-handle-classes.html

它不是免费的,但Mathworks制作了一个名为Matlab Coder的产品,用于从Matlab代码生成C ++代码。