2

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

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

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

在我对标量类型的实验中,我遇到了类似的问题 - 在 tm 文件中使用“Integer”时正确调用了一个 c++ 函数,而“Integer32”则无法识别。

“sumalist.tm”示例还使用了一个奇怪的 Pattern (list:{___Integer}),我没有找到任何文档。我还想了解 Evaluate 行的含义(我怀疑它用于使函数在列表周围没有大括号的情况下可调用)。

那么谁知道哪些数据类型真正适合用列表调用 c++ 函数 - 也许也可以用实数......?

4

2 回答 2

5

MathLink 数据类型(例如 , , ...)到 C/C++ 类型的映射Integer32Integer32ListMathLink模板文件文档页面上进行了描述。

该页面不再记录旧的接口类型IntegerReal和。这些不应再使用,因为这些类型的映射取决于位长度取决于平台和编译器的 C 类型(例如,)。改用具有显式位长的相应新类型(即,或代替)。旧的接口类型仍然记录在有些过时的MathLink 参考指南中。IntegerListRealListlongInteger32Integer64Integer

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

于 2012-04-13T17:56:35.713 回答
3

我对 MathLink 了解不多,但我可以解释一下模式,list:{___Integer}.

冒号只是命名模式的一般形式,symbol:pattern只是表示所引用的对象symbol必须匹配pattern。事实上,类似a_Integerorb__List的模式实际上只是a:_Integerand的简写形式b:__List

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

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

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

于 2012-04-15T12:58:44.383 回答