MATLAB中的源树组织(包括)

MATLAB中的源树组织(包括),matlab,include,Matlab,Include,假设我有很多源文件,我想把它们组织在文件夹树结构中 我是否可以拥有几个同名的文件,并在需要的地方使用它们中的每一个,或者我必须拥有具有不同名称的所有函数和类 在C++中,我包括介绍我需要的函数,在这里?< /P> 仅举例说明: .\main.m .\Algorithms\QR\Factory.m % function Factory .\Algorithms\QR\Algorithm.m % function Algorithm .\Algorithms\SVD\Factory.m

假设我有很多源文件,我想把它们组织在文件夹树结构中

我是否可以拥有几个同名的文件,并在需要的地方使用它们中的每一个,或者我必须拥有具有不同名称的所有函数和类

在C++中,我包括介绍我需要的函数,在这里?< /P> 仅举例说明:

.\main.m
.\Algorithms\QR\Factory.m    % function Factory
.\Algorithms\QR\Algorithm.m  % function Algorithm
.\Algorithms\SVD\Factory.m   % function Factory
.\Algorithms\SVD\Algorithm.m % function Algorithm
MATLAB支持。因此,在您的示例中,您将创建以下内容:

C:\some\path\main.m
C:\some\path\+algorithms\+qr\factor.m
C:\some\path\+algorithms\+svd\factor.m
注意:只有顶级软件包文件夹的父文件夹必须位于MATLAB路径上,即:addpath'C:\some\path'

然后,您可以使用其完全限定名调用每个:

>> y = algorithms.qr.factor(x)

>> y = algorithms.svd.factor(x)
您还可以在某些范围内导入包。例如:

function y = main(x)
    import algorithms.svd.*;
    y = factor(x)
end

为了理解这个问题,我需要解释C++源代码和头文件之间的关系,以及M文件.

之间的区别。 首先:在matlab中,您只能运行在.m文件中定义最高的函数。此文件定义层次结构的顶部。然后子函数可以在同一个m文件中实现,但这些子函数只能在同一个.m文件中使用

其次:除此之外,matlab还搜索了包含路径中的特定文件名,并假设文件中的函数将具有相同的名称。如果使用文件名以外的其他名称定义函数,则会出现警告。这里的问题是,如果所有函数都是全局函数,则不能有两个同名的matlab函数。这将与您在C++中具有相同名称和相同命名空间的2个函数相同。 注意:matlab中的include路径通常可以使用程序的to文件夹中的硬编码文件来完成。此函数使用matlab函数addpath

这是与c/c++的一个根本区别,c/c++允许在同一源文件中定义多个函数。然后,头文件通过提供函数定义来选择在程序中实现的源代码。这里重要的一点是,标头与函数名完全断开连接,而函数名不在matlab中。这意味着你例子中的类比并不准确。您建议的是包含两个同名函数。这在c/c++中都是不可能的,假设函数使用相同的名称空间或ar全局或在matlab中

示例:如果标题topFolder/foo/bar.h和topFolder/baz/bar.h都包含函数void myDupint a,并且这两个标题使用相同的命名空间或是全局的,则会生成错误


但是,如果这些函数仅由数量有限的其他函数使用,那么一个函数(例如Factory.m)可以作为私有函数包含在不同的文件夹中。这也意味着只有这个文件夹可以访问它。也可以使用matlab名称空间,如中所述。

此问题可能会有所帮助:但看起来Mathworks已经删除了此方面的文档:/n您可能需要稍微指定此问题。问题是您想在同一个文件中编写多个函数并分别使用它们吗?还是要创建多个同名文件,每个文件包含一个函数?或者混合。或者,你想给很多文件同名,让它们包含不同名称的函数吗?好的,那么你想做类似于C++中的一些算法,包括算法\ QR\Pr.m…包括\Algorithms\SVD\Factroy.m?@patrik,是的,包括其中一个。我知道addpath和rmpath,但这似乎不是很方便。@Dan:doc链接在几个版本之前已经重新组织,但解决方案仍然有效:您可能想补充一点,这与他在示例中所写的不完全相同,因为matlab函数与头不相同。头包含函数定义,如果两个不同的头使用相同的命名空间或是全局的,那么在c/c++中也会有冲突。否则,答案真的很好。我完全没有意识到这一点。这类似于Java中的in或packages。这只是一种组织相关函数和类并避免名称冲突的方法。。显然,MATLAB中没有包含,最接近的东西是addpath。虽然在我将文件移动到SDK/算法中后,它有自己的一组规则要确定,但它无法使用命令SDK.Algorithms.QR.ModifiedA找到它们。我得到了未定义的变量SDK或类SDK.Algorithms.QR.Modified。@Yola:你注意到每个包文件夹名称开头的+号了吗?你可能想先浏览一下我链接的文档页。。