首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表从Mathematica传递到c++ (Mathlink)

将列表从Mathematica传递到c++ (Mathlink)
EN

Stack Overflow用户
提问于 2012-04-13 22:12:07
回答 2查看 715关注 0票数 2

我只是想将一个整数列表传递给一个用C++编写的函数。我已经设置了模板(.tm)文件和所有文件,并且可以成功地调用带有标量参数的测试函数。使用list参数调用函数的行为就好像根本没有定义该函数一样。我怀疑参数类型不匹配。

在模板文档(http://reference.wolfram.com/mathematica/ref/file/file.tm.html)中,列表的数据类型类似于"Int32List“。当我使用它时,我的C++函数必须包含一个超长的列表长度参数。使用列表的唯一示例代码是"sumalist.tm“。这个例子使用了IntegerList (一种没有出现在doku中的类型)。

当我使用Int32List时,mprep结果需要一个带有额外整数参数的函数(不像在doku中写的那样长)。当我使用无文档记录的IntegerList类型时,额外的参数是long类型。

在我使用标量类型进行实验的过程中,我遇到了一个类似的问题--在tm文件中使用“整数”时,c++函数被正确调用,而"Integer32“却无法识别。

"sumalist.tm“示例还使用了一种奇怪的模式(list:{___Integer}),我没有找到任何关于它的文档。我还想理解Evaluate行的含义(我怀疑它是用来使函数可调用,而不是用大括号将列表括起来)。

因此,谁知道哪些数据类型真正适合用列表调用c++函数--也许也用实数调用……?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-15 20:58:44

我不太了解MathLink,但我可以解释它的模式,list:{___Integer}

冒号只是命名模式的一般形式,也就是说,symbol:pattern只表示symbol引用的对象必须与pattern匹配。实际上,像a_Integerb__List这样模式实际上只是a:_Integerb:__List的缩写形式。

因此,留给我们解释的就是{___Integer}。这是一个匹配任意多个(包括零)整数列表的模式。它的工作原理如下:

{Pattern}是其内容与Pattern匹配的列表的模式

___Integer是零个或多个Integer序列的模式。

票数 3
EN

Stack Overflow用户

发布于 2012-04-14 01:56:36

MathLink数据类型(例如,Integer32Integer32List等)的映射到C/C++类型的转换在MathLink template file文档页面中有描述。

该页面不再记录旧的接口类型IntegerRealIntegerListRealList。不应该再使用这些类型,因为这些类型的映射依赖于位长度与平台和编译器相关的C类型(例如,long)。使用具有显式位长度的相应新类型(即,使用Integer32Integer64而不是Integer)。旧的接口类型仍然被记录在有些过时的MathLink reference指南中。

下面的talk slides包含一个简单的MathLink示例,该示例展示了如何实现将标量值添加到实数向量的MathLink函数。这可以作为一个起点。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10142453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档