python - 我可以将 c++ 模板类导出到 C,然后再导出到带有 ctypes 的 python 吗?

标签 python c++ c

对于非模板类,我会写类似 that 的东西

但是如果我的类是模板类,我不知道该怎么办。

我试过类似的东西,但没有用。

extern "C" {
    Demodulator<double>* Foo_new_double(){ return new Demodulator<double>(); }
    Demodulator<float>* Foo_new_float(){ return new Demodulator<float>(); }
    void demodulateDoubleMatrix(Demodulator<double>* demodulator, double * input, int rows, int columns){ demodulator->demodulateMatrixPy(input, rows, columns) }
}

最佳答案

注意:您的问题与代码部分矛盾,所以我暂时忽略代码。

C++ 模板是一种精心设计的宏机制,可在编译时 解析。换句话说,二进制文件仅包含来自模板实例化的代码(这是您将参数(通常是类型)应用于模板时获得的代码),而这些都是您可以从二进制文件导出到其他语言的代码。导出它们就像导出任何常规类型,例如参见 std::string

由于模板本身无法在编译后继续存在,因此您无法将它们从二进制文件导出到 C、Python 甚至 C++!对于后者,您可以自己提供模板,但这不会将它们包含在二进制文件中。

两个假设:

  • 通过二进制文件导出/导入作品。当然,您可以编写解析 C++ 的导入。
  • C++ 指定(或指定?)导出模板,但据我所知,这并没有真正在野外实现,所以我没有使用该选项。

关于python - 我可以将 c++ 模板类导出到 C,然后再导出到带有 ctypes 的 python 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23916218/

相关文章:

c++ - 如何检查麦克风和扬声器是否来自同一个声卡?

c - 获取日期并将其保存在结构体 C 中

c - 写入命名管道未显示字符串的全部内容

python - 在 python flask 中为 neo4j + sql 制作 ORM 的最干净方法?一个模型超过 2 个数据库

python - Boto:如何在完成/失败后保持 EMR 作业流程运行?

python - Python 'for' 循环中的范围

c - C语言中Rand()基于什么算法?

python - Django 默认使用 HTTPS

c++ - boost asio tcp ip 写入

c++ - Emacs 可以在重新缩进缓冲区时将 C++ 大括号转换为挂起吗?