Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++模板类与MATLAB MEX 我想知道是否有一个优雅的方式来编写一个Matlab/MEX接口到模板C++代码。p> 下面是这样的情况:比如说我已经编写了一套非常好的C++模板类,比如:: template<FooType T> Foo{ private: //Some data public: //Constructors, methods }; template<BarType S> Bar{ private: //Some data public: //Constructors, methods }; template<FooType T, BarType S> MyClass{ private: Foo<T> *D; Bar<S> *M; public: //Constructors, methods };_C++_Matlab_Templates_Mex - Fatal编程技术网

C++模板类与MATLAB MEX 我想知道是否有一个优雅的方式来编写一个Matlab/MEX接口到模板C++代码。p> 下面是这样的情况:比如说我已经编写了一套非常好的C++模板类,比如:: template<FooType T> Foo{ private: //Some data public: //Constructors, methods }; template<BarType S> Bar{ private: //Some data public: //Constructors, methods }; template<FooType T, BarType S> MyClass{ private: Foo<T> *D; Bar<S> *M; public: //Constructors, methods };

C++模板类与MATLAB MEX 我想知道是否有一个优雅的方式来编写一个Matlab/MEX接口到模板C++代码。p> 下面是这样的情况:比如说我已经编写了一套非常好的C++模板类,比如:: template<FooType T> Foo{ private: //Some data public: //Constructors, methods }; template<BarType S> Bar{ private: //Some data public: //Constructors, methods }; template<FooType T, BarType S> MyClass{ private: Foo<T> *D; Bar<S> *M; public: //Constructors, methods };,c++,matlab,templates,mex,C++,Matlab,Templates,Mex,我编译main.cpp并运行它并感到高兴。这是因为我在编译时选择了模板参数,就像C++模板设计一样。到目前为止,这对我来说效果很好,我喜欢它的设计 现在假设我想编写与main.cpp相同类型的程序,但使用Matlab作为脚本语言,并为我的classes.hpp提供一个Mex接口。想要这样做的主要原因是,我的代码是现有matlab软件包的附加组件。有没有一种优雅的方法来编写我的mex文件,这样我就可以访问每一对可能的模板参数?我开始做的是用大量的switch语句编写接口文件,这样我就可以选择Foo

我编译main.cpp并运行它并感到高兴。这是因为我在编译时选择了模板参数,就像C++模板设计一样。到目前为止,这对我来说效果很好,我喜欢它的设计

现在假设我想编写与main.cpp相同类型的程序,但使用Matlab作为脚本语言,并为我的classes.hpp提供一个Mex接口。想要这样做的主要原因是,我的代码是现有matlab软件包的附加组件。有没有一种优雅的方法来编写我的mex文件,这样我就可以访问每一对可能的模板参数?我开始做的是用大量的switch语句编写接口文件,这样我就可以选择FooType和BarType——实际上,Mex文件编译每个可能的n*m类实例,并将它们放在那里供Matlab使用。这看起来还行,现在我有n=3,m=2,但它看起来也很邋遢,很难维护


我曾考虑过让用户在每次选择不同的FooType和BarType时重新编译mex文件,但这似乎也有点激怒了普通的Matlab用户。谢谢你的意见

我不熟悉Mex;我只是一个C++用户。如果没有MATLAB对运行时库生成的直接支持,您所描述的是不可能的,我认为这甚至是不存在的。您肯定需要在编译时预先实例化所有内容。这并不简单

正如您所说的,问题在于模板都是在编译时生成的,并且直到运行时(当所有类型信息都消失时)才使用它们。如果MATLAB知道损坏方案,则损坏的名称不应成为问题


所以你必须在C++级别上解决这个问题。在C++中,没有一种类型安全的方法来将类型的名称作为字符串来获取。唯一的解决方案是使用宏来消除一些膨胀。这是不幸的,因为如果可能的话,一个非常优雅的解决方案可能是STD::所有有效参数类型的元组,和一个小递归模板魔术。

如果你使用八度或Python,你应该考虑使用SWIG。当使用Matlab时,应该考虑使用类型库和MATLAB外部接口来代替MEX接口。mex接口要求您编写大量不必要的模板。你可以做的是使用Sug来包装C++到普通C,这可以直接使用外部接口来访问,你如何想象用户指示这两种类型是什么样的MEX文件?@ JensMunk可以工作,但是我认为我已经足够远了,现在切换到Switg将是一个巨大的痛苦。很公平。我用MEX接口工作了相当长的时间,实际上是用引用计数和模板化静态GabajGe收集器来管理用Matlab对象包装C++模板对象。它相当整洁。大量用于实例化模板和验证输入参数的宏。我发表了一篇关于这一点的论文,但重点不是超声波coding@Praetorian我一直在使用类似的代码。基本上我编写了一个Matlab类,它反映了C++类,然后使用Max我能够直接从MATLAB初始化我的C++变量,然后通过MATLAB类接口调用它们的方法,如果这是有意义的。因此,用户在Matlab端做一些事情,比如x=Fooparams;y=巴参数;z=MyClassx,y;z、 溺爱。
int main()
{
    Foo<fooType1> *F = new Foo<fooType1>(params);
    Bar<barType3> *B = new Bar<barType3>(params);

    MyClass<fooType1,barType3> *M = new MyClass(F,B);

    M->doThing();

    return 0;
}