Есть ли способ быстро представить функции C / C ++ как файлы MATLAB MEX? - PullRequest
1 голос
/ 06 апреля 2019

Я хочу автоматизировать генерацию исходных MEX-файлов C, чтобы представить функции C в MATLAB. Я надеюсь найти что-то похожее на Boost.Python, который использует метапрограммирование шаблонов C ++, чтобы обернуть существующий код C ++ без необходимости изменять исходный код. Обратите внимание, что я в первую очередь заинтересован в демонстрации функций прямо сейчас, а не экземпляров классов. Если нет какой-либо библиотеки, которая бы это делала, есть ли лучший подход для решения этой проблемы, чем шаблонное метапрограммирование? Я пробовал использовать функцию loadlibrary для MATLAB, но думаю, что ее использование не является интуитивно понятным для большинства конечных пользователей, с которыми я работаю.

В настоящее время я пишу MEX-оболочки с исходным кодом на C вручную, что занимает очень много времени и, самое главное, трудно поддерживать в работе. У меня нет проблем с тем, чтобы заставить работать мои MEX-оболочки, просто время, необходимое для предоставления функции MATLAB через MEX, на несколько порядков больше, чем то, что требуется мне, чтобы представить их Python.

Этот пример показывает идею того, что я хотел бы сделать. Я хотел бы представить функцию TimesTwo для MATLAB, которая в настоящее время требует, чтобы я написал mexFunction, которая проверяет количество аргументов ввода / вывода, преобразует указатели массива MATLAB в типы данных C, вызывает функцию C TimesTwo, а затем присваивает результаты MATLAB. выходные аргументы. #include "mex.h" #include "some_template_library.hpp"

// This is the function I want to expose
double TimesTwo(double in)
{
    return 2*in;
}

// This macro would expand to generate the mexFunction gateway
// It would also define the data types and perform error checking
// I realize the actual implementation would need to be more complex than this
EXPOSEFUNCTION(TimesTwo,double in, double out)
...