3

次のようなCodegenコマンド:

codegen -config:dll ep1 -args single(0) ep2 -args {0,0}

次のような関数は簡単です。

function y = ep1(u) %#codegen
y = u;

function y = ep2(u, v) %#codegen
y = u + v;

スカラー構造体引数を定義する方法を考えています。上記の引数uは次のようになっていると仮定します(つまり、2つのフィールドで構成されています-1つのcharと1つのdouble):

u.FirstName = 'Loren';
u.Height = 150

PS:

ちょうどこのようなものを見つけました:

s = struct('a',42,'b',4711);
codegen topfun.m -args { s }

これは解決策でしょうか?これは例による定義だと思います。

4

2 に答える 2

1

これは私にとってはうまくいくようです:

codegen -report -config:dll ep1 ...
                            ep2

実際の「関数シグネチャ」(したがってスカラー構造体)は、次のような関数で定義できます。

function [bla] = ep1(parameters)
%#codegen

assert(isstruct(parameters));
assert(isa(parameters.x1,'char'));
assert(size(parameters.x1, 1) >= 1);
assert(size(parameters.x1, 1) <= 1024);
assert(isa(parameters.x2,'double'));
...

私が抱えている問題は、親関数でパラメーターを使用していなくても、親関数ですべてのパラメーターを定義する必要があるように見えることです。

上記のものを見てください。ep1がep2の親関数であり、ep1がparameters.x2を使用しないとしましょう。それでも、ep1でそれをアサートする必要があります。これが理にかなっていることを願っています。

于 2012-11-29T08:48:50.710 に答える
0

構造体の定義は、関数を使用してキャプチャできますcoder.typeof

最初にスクリプトを使用して構造体を初期化し、coder.typeofを使用して構造体定義をキャプチャしてから、以下に示すように-argsを使用して定義を渡します。

u = Initialise(u);
p = InitialiseParameters();

tx = coder.typeof(u);
tp = coder.typeof(p);

codegen topfun.m -args {tx, tp} -config:dll 
于 2016-09-23T07:23:07.757 に答える