オブジェクト指向で記述されたMatlabスクリプトからCコードを生成することが可能です。ただし、オブジェクトの周りに関数をラップする必要があります。MatlabCoderが必要です。
Matlabは、値クラスとハンドルクラス(ハンドルから派生するすべてのクラス)を区別します。
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。ハンドルクラスを使用した関数
myHandleClassのオブジェクトは永続的である必要があります。また、isempty関数は必須です。
%#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。値クラスを使用する関数
%#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。