如何在c中调用的matlab函数中使用“全局静态”变量

时间:2013-03-30 04:00:20

标签: c++ matlab global-variables matlab-deployment matlab-compiler

您好我正在使用MATLAB和C进行编码。我已使用MATLAB Compiler(mcc)将MATLAB函数编译到C共享库中,并在C ++程序中调用共享库中的函数。

在C ++中调用时,是否可以声明全局变量在MATLAB函数之间共享数据?

确切地说,如果matlab中有函数matlabA()和函数matlabB(),并使用mcc编译器cppA()cppB()编译成c ++共享库,只是通过在matlabA()matlabB()中将变量声明为全局变量,我可以在它们之间共享变量吗?

它似乎不起作用,那么如何在函数之间共享变量?

谢谢!

MATLAB

function matlabA()
    global foo
    foo = 1;
end

function matlabB()
    global foo
    foo
end

C ++

cppA();
cppB();

1 个答案:

答案 0 :(得分:2)

根据Loren Shure的this blog post,强烈建议不要在已部署的应用程序中使用非常量静态变量(例如读/写全局变量)。

相反,您可以创建一个handle class来封装数据,并将对象显式传递给那些函数(具有引用复制语义)。

示例:

FooData.m

classdef FooData < handle
    properties
        val
    end
end

fun_A.m

function foo = fun_A()
    foo = FooData();
    foo.val = 1;
end

fun_B.m

function fun_B(foo)
    disp(foo.val)
end