c++ - 从 C++ 调用 Haskell 库

标签 c++ api haskell interface ffi

我正在 Qt (C++) 中构建一个应用程序,它使用用 Haskell 编写的库作为后端。如何将Haskell库的接口(interface)导出到C++

当haskell 库中的函数使用像intfloat 这样的简单类型时,这不是问题,但是当它们使用结构作为参数时呢?在这种情况下,最具扩展性的解决方案是什么?

最佳答案

您需要编写 haskell 代码来将这些数据结构编码为您可以在 Haskell 中使用的数据结构。 c2hs 工具在这方面很有帮助:http://hackage.haskell.org/package/c2hs

虽然该工具似乎是为从 Haskell 调用 C 而设计的,但它在相反的意义上也非常有用——它允许您将复杂的 C 类型编码为 Haskell 类型。由于您公开的函数需要采用 C 类型(通常是指向复杂结构的指针),因此您可以 A)构造适当的 C 结构,并且 B)使用 c2hs 提供的功能,然后将这些结构编码到公开函数中的 Haskell ,以便您可以与他们合作。

还请注意,使用 c2hs 样式生成的工具,您不需要编码所有内容。您可以只生成访问器来查看您真正关心的 C 数据结构部分。

关于c++ - 从 C++ 调用 Haskell 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17815804/

相关文章:

c++ - 可以改善我的字符串拆分功能的建议

c++ - 显示对话框后运行函数

php - 在谷歌日历上同步约会时收到警告?

php - 哪个 API 标准?

haskell - 类型类、关联族 -> 容器、​​键和元素 : Who is who?

c++ - Qt:自定义插槽不起作用

c++ - 在 .pro 中更改构建目录

javascript - 尝试运行 overwolf 示例应用程序时出现未经授权的应用程序警报

haskell - 针对只有一个构造函数的类型进行模式匹配

haskell - Cabal 安装沙箱无法重新安装基础或任何其他依赖项