我不明白Smoke是什么。我一直期待smoke 会为C++ 代码生成C 包装器,并使用生成的函数创建头文件。
但是smokegen
在 C++ 头文件上运行会给我一个很小的头文件,它只是导出指向某个Smoke
类和<sourcename>_smoke_init()
函数的指针。
我该怎么办?
Smoke 是一个运行时绑定生成器,如果你知道的话,有点像 gobject-introspection。
这意味着它会生成有关您正在绑定的代码的信息,并将其作为库提供。为了使用生成的库,您必须针对 Smoke API(这是一个 C++ API)编写代码,以获取有关您为其生成绑定的代码的信息,并使用 Smoke API 将函数调用到您正在使用的代码中包装。
页面http://techbase.kde.org/Development/Languages/Smoke中的示例显示了如何使用 API 调用您正在绑定的代码(在此处创建 Qt Widgets hello world 示例)
Smoke API 在http://techbase.kde.org/Development/Languages/Smoke/API_Documentation介绍了一些棘手的部分,但我发现的主要信息来源是smoke.h 标头。
我已经开发了一个与 Smoke 的 C 绑定(https://github.com/pankajp/pysmoke/blob/master/include/smokec.h),以尝试编写一个基于 Smoke 的 Qt-python 绑定,它已经适用于某些人简单的程序。如果您想使用来自 C 的 Smoke,您可能会发现它是一个起点。
相反,如果您只是对向 C 公开一个简单的小型 C++ 库感兴趣,而不用担心在 C 中创建子类(以任何方式)并覆盖虚拟或受保护方法,那么您只想使用现有代码而不扩展它无论如何,您最好手动编写绑定(就像我为 Smoke C++ API 所做的那样,尽管我还提供了一种通过传递函数指针在 C 中实现虚方法的方法)