我有一个C ++文件,在单个.cpp文件中有一些功能,例如
int func1(x)
{
return 1;
}
void func2(x)
{
return 1;
}
int func3(x)
{
return 1;
}
现在,我想在一个matlab文件中编写所有上述函数。 (如果我为每个函数添加了一个自己的matlab文件,我的文件夹会变得非常庞大。)你能否在MATLAB中向我建议一个简单明了的方法?
目前,我这样做:
function f = perform(func, x);
switch(func)
case 'f1'
f = func1(x);
case 'f2'
f = func2(x);
case 'f3'
f = func3(x);
otherwise
error(['Unknown function ', func]);
end
答案 0 :(得分:2)
查看local或nested个功能。本地函数与其他编程语言语法最为相似。
本地功能,例如:
function f = perform(func, x);
switch(func)
case 'f1'
f = func1(x);
case 'f2'
f = func2(x);
case 'f3'
f = func3(x);
otherwise
error(['Unknown function ', func]);
end
end
function func1(x)
disp(sprintf('func1: %u\n', x))
end
function func2(x)
disp(sprintf('func2: %u\n', x))
end
function func3(x)
disp(sprintf('func3: %u\n', x))
end
请注意,本地或嵌套函数都不可从外部调用。
答案 1 :(得分:2)
您可以组织包中的函数,请参阅Packages Create Namespaces,每个cpp文件一个
+module1
func1.m
func2.m
+module2
func1.m
然后您可以将这些功能称为
module1.func1(x)
module2.func1(x)
答案 2 :(得分:1)
如果设置了一堆函数句柄,可以在外部调用本地函数。不是我推荐这个,但我从同事那里得到了这个设置。这段代码并不健全 - 几乎可以肯定它会失败或做坏事。
% code to create callable handles for all subfuncs in some file
%
% first, in the file containing subfuncs:
% this is the "setup" main func
function [p]=To_Call_Subfuncs()
[p,n]=update_function_list();
end
% this creates all the handles by pseudogrepping the subfunction names
function [p,function_names]=update_function_list()
function_names={};
% making p empty allows one to call, e.g. funclist.firstfunc()
p=[];
f=fopen([mfilename() '.m'],'r');
while ~feof(f),
line=fgetl(f);
s= strfind( strtrim(line),'function ') ;
if length(s) && s(1)==1,
s0=find(line=='=');
s1=find(line=='(');
if length(s0)==0,s0=9;end;
if(length(s1)==0), s1 = numel(line)+1;end; %to handle the -1 later on
function_name= strtrim( [line(s0(1)+1:s1(1)-1)] );
if length(function_name),
function_names{end+1}=function_name;
eval( sprintf('p.%s=@%s;', function_name, function_name) );
end;
end;
end;
end
%
%follow this with the functions we actually want to call
function a = firstfunc(x)
a=x;
end
function b = secondfunc(x)
b = x^2;
end
function cnot = thirdfunc
cnot= 17;
end
%
%
% next, in the m-file where some function is calling these subfuncs,
% set up the handles with:
% run(fullfile(dirpath,'the_mfile.m'))
% the_mfile=ans;
% because I don't think run() returns a value --
%% only the called mfile does.
% now you can call the_mfile.firstfunc() and so on.