有条件地使用 coder.extrinsics
Posted
技术标签:
【中文标题】有条件地使用 coder.extrinsics【英文标题】:Using coder.extrinsics conditionally 【发布时间】:2015-06-15 15:43:19 【问题描述】:这个问题指的是 Matlab coder 外在功能。像fprintf
这样的一些函数在较旧的 Matlab 版本中是外在的,而在较新的版本中不是外在的。有没有办法支持多个Matlab版本,如果coder.extrinsics
只允许在顶层,并且不能放在if
语句下?
【问题讨论】:
【参考方案1】:您不能有条件地直接将某些函数设为外部函数。一种方法是使用两个不同的函数,例如 fprintf_old 和 fprintf_new。 fprintf_old 将具有 coder.extrinsic 声明,然后调用 fprintf。 fprintf_new 可以在没有外部声明的情况下调用 fprintf。现在,您可以通过在编译期间使用恒定条件检查您的版本来在两个调用之间进行选择。例如,
if coder.const(isOlderVersion())
fprintf_old();
else
fprintf_new();
end
【讨论】:
【参考方案2】:在代码生成中,feval
constructs an extrinsic call 指向第一个参数中命名的函数。由于您可以在控制流中嵌入对feval
的调用,因此可以使用它来选择性地从外部调用函数并将代码保存在单个源文件中:
if isOlderVersion()
% Call fprintf extrinsically
feval('fprintf');
else
fprintf();
end
【讨论】:
以上是关于有条件地使用 coder.extrinsics的主要内容,如果未能解决你的问题,请参考以下文章