如何使用 Cython 连接返回C++自定义类的函数
How to interface a function that returns a C++ custom class with Cython?
我有这个C++函数原型:
Bar & getBar()
其中 Bar 是用户定义的C++类。现在我想以最简单的方式将这个函数与 Cython 接口。
我的 .pyx 文件如下所示:
cdef class PyBar:
cdef Bar* thisptr
(...)
def pygetBar():
cdef Bar bar = getBar()
cdef PyBar pybar = PyBar()
(*pybar.thisptr) = bar # <-- too bad, do not work
无论我尝试什么,我都无法在"thisptr"中复制C++ Bar实例。对于上面的行,我收到此Cython错误消息:
Cannot assign type 'Bar' to 'Bar *'
我找到的唯一解决方案是定义一个只执行复制的C++帮助程序函数:
void helper_copy_bar(Bar* source, Bar* destination)
{ *destination = *source }
虽然这有效,但每次我只想接口这样一个简单的函数时,创建一个新的C++函数是非常烦人的。文档中一定缺少一些东西。
编辑:
我发现了一种具有其他缺点的解决方法:
def pygetBar():
cdef Bar * bar = new Bar(getBar())
cdef PyBar pybar = PyBar()
del pybar.thisptr
pybar.thisptr = bar
return pybar
它仍然涉及对c ++对象的无用新建/删除,但至少不需要外部函数(对懒惰者有好处)。我仍然想知道哪种解决方案(外部函数或第二个)更好,以及是否有办法在没有外部函数的情况下使用第一个解决方案。
Bar&引用了Bar,它不是指向Bar的指针,尽管在内部,编译器可以将其实现为指针。 简化此操作的最简单方法是编写一个辅助程序 C 函数,我不知道 Cython 对 C++ 有明确的支持? 您的"解决方法"看起来很合适。
相关文章:
- 将自定义函数传递到基抽象类中以延迟执行
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 将具有固定签名的自定义函数名称注入 CRTP
- 每个类实例的自定义函数 (C++)
- C++,当函子不是一个选项时,我如何编写带有自定义函数调用的模板化 RAII 包装器?
- 具有自定义函数的 C++ 矢量构造函数
- 自定义函数转换错误?
- 模板中的自定义函数C++
- 如何将CString转换为使用WCHAR的Windows API和自定义函数?
- r-工作程序中对自定义函数的未定义引用(C++和RcppParallel)
- 传递自定义函数类型时的'incompatible types in assignment'
- 从状态内的自定义函数(不是操作)提升 MSM 调用process_event?
- 如何使用C 代码调用MATLAB自定义函数
- glibc函数的GCC、-flto、-fno内置和自定义函数实现
- 自定义函数中断
- 在1语句中传递一个自定义函数作为模板参数
- 特征中的系数自定义函数
- "stoi"没有在此范围内声明,即使添加 -std=c++0x 和自定义函数,仍然适用
- 为什么我的指针在 main 中取消引用后具有不同的值,而不是在我自己的自定义函数中取消引用它时?
- 我们可以用自定义函数扩展现有的类吗?(无继承)