gpt4 book ai didi

Haskell FFI - C 结构数组数据字段

转载 作者:行者123 更新时间:2023-12-01 23:13:26 24 4
gpt4 key购买 nike

我正在为具有相当复杂接口(interface)的 native 库开发 haskell 绑定(bind)。它有很多结构作为其接口(interface)的一部分,我一直致力于使用 hsc2hsbindings-DSL 包构建它们的接口(interface),以帮助自动化结构绑定(bind).

不过,我遇到的一个问题是包含多维数组的结构。 绑定(bind)-DSL documentation描述用于绑定(bind)到类似

的结构的宏
struct with_array {
char v[5];
struct test *array_pointer;
struct test proper_array[10];
};

使用像这样的宏

#starttype struct with_array
#array_field v , CChar
#field array_pointer , Ptr <test>
#array_field proper_array , <test>
#stoptype

但是这个库有许多以多维数组作为字段的结构,更像

struct with_multidimensional_array {
int whatever;
struct something big_array[10][25][500];
};

#array_field 宏似乎只处理数组的第一个维度。 bindings-DSL 是否没有用于处理多维数组的宏?

我真的很想要一个宏,用于将(可能是多维的)数组绑定(bind)到任意索引的 StorableArray 。似乎必要的信息可以在 bindings-DSL 提供的宏中找到 - 只是没有宏用于此。

有人向 bindings-DSL 添加了宏吗?有人为此向 bindings-DSL 添加了宏吗?我是否已经超出了我应该使用 hsc2hs 做的事情,还有其他一些工具可以帮助我以更简洁的方式做我想做的事情?

最佳答案

好吧,没有人提出其他任何想法,所以我会在评论中同意这个想法。我将使用 #field 宏而不是 #array_field 宏,并指定一个包装 StorableArray 的类型以使其正常工作。

由于我对此进行了相当多的思考,我意识到可以使用 GHC 7.6+ 支持的新类型级数字完全抽象出包装器。我整理了一个名为 storable-static-array 的包它在类型级别上获取维度,并提供适当的 Storable 实例来处理 native 数组,甚至是多维数组。

仍然缺少的一件事是我非常想要的,那就是找到一种方法来编写与 bindings-DSL 兼容的宏,该宏可以自动提取维度并负责正确生成它们。不过,快速浏览一下 bindings-DSL 中的宏后,我确信自己的了解还不足以自行管理它。

关于Haskell FFI - C 结构数组数据字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17934580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com