Чтобы понять эту проблему, мне нужно, чтобы объяснить некоторые различия между отношением C++ исходных файлов и файлов заголовка и .m файлов.
Во-первых: В Matlab вы можете запускать только функцию, которая определяется наивысшим образом в файле .m. Этот файл определяет вершину иерархии. Тогда подфункции могут быть реализованы в том же файле m, но они могут использоваться только внутри одного файла .m.
Во-вторых: В дополнение к этому, Matlab проверил путь включения для определенного имени файла и предположил, что функция внутри файла будет иметь то же имя. Вы заметите это с помощью предупреждения, если вы определите функцию с другим именем, кроме имени файла. Дело в том, что у вас не может быть двух функций matlab с тем же именем, если все функции глобальны. Это было бы так же, как если бы у вас было бы 2 функции с тем же именем и в том же пространстве имен в C++.
Примечание: Путь включения в matlab обычно может выполняться с жестко закодированным файлом в папке вашей программы. Эта функция использует функцию matlab addpath
.
Это принципиальное отличие от c/C++, когда в одном исходном файле разрешено определять несколько функций. Затем заголовочный файл выбирает исходный код, который вы реализуете в программе, предоставляя определения функций. Важно то, что заголовок полностью отключен от имен функций, которых они не в matlab. Это означает, что аналогия в ваших примерах не совсем точна. Предложенная вами вещь состоит в том, чтобы «включить» 2 функции с тем же именем. Это невозможно, либо c/C++ (предполагая, что функции используют одно и то же пространство имен или ar global), либо в matlab.
Пример: Если заголовки topFolder/foo/bar.h и topFolder/baz/bar.h будут содержать функцию void myDup(int a)
, и оба заголовка используют одно и то же пространство имен (или являются глобальными), то это приведет к возникновению ошибки.
Однако, если функции используются только ограниченным числом других функций, то функция, например. Завод.м, могут быть включены как частные функции в разные папки. Это также означает, что только эта папка может получить к ней доступ. Также возможно использовать пространство имен matlab, как указано в Amro's answer.
Этот вопрос может помочь: http://stackoverflow.com/questions/1277613/how-do-emulate-include-behaviour-in-matlab, но похоже, что Mathworks удалила документы для этого:/ – Dan
You может немного задать этот вопрос. Проблема в том, что вы хотите написать несколько функций в одном файле и использовать их отдельно? Или вы хотите создать несколько файлов с одинаковыми именами и каждый файл, содержащий одну функцию? Или, может быть, смесь. Или вы хотите дать много файлов одинакового имени и позволить им содержать функции с разными именами? – patrik
Итак, тогда вы хотите сделать что-то похожее на то, что в C++ будет '#include 'Алгоритмы \ QR \ Factory.m" ... #include "\ Algorithms \ SVD \ Factroy.m" '? – patrik