Cython如何将C++类导出为.hpp头文件而非C语言.h头文件
解决方案
1. 生成包含class关键字的C++头文件
Cython的cppclass默认生成struct是因为无自定义访问修饰符时,C++ struct和class仅默认访问权限存在差异,Cython会优先用struct输出完全public的类型。如果需要强制输出class关键字,只需给cppclass显式添加非public的访问修饰符即可,示例代码如下:
cdef public: cppclass foo: float bar # 显式添加私有访问修饰符,触发Cython用class声明 private: int __dummy
上述代码转译后,头文件中就会生成带class关键字的类型定义。
如果你不需要额外私有成员,也可以接受C语法规则的话,实际生成的struct类型在C环境中可以完全正常当作类使用,二者仅默认访问权限不同,不存在功能差异。
2. 自定义输出头文件后缀
Cython默认输出.h后缀的头文件,你可以通过--output-header参数直接指定输出的头文件完整名称,即可得到.hpp/.hh后缀的产物,调整后的转译命令如下:
cython3 -3 --cplus --fast-fail mod.pyx --output-header mod.hpp
如果需要.hh后缀,将参数值改为mod.hh即可。
内容的提问来源于stack exchange,提问作者Dan D
相关产品推荐
相关产品推荐

