【发布时间】:2019-11-13 17:03:08
【问题描述】:
假设我有一个包含以下代码的 .h 文件:
class MyClass
{
public:
int Attribute1;
int Attribute2;
MyClass(){};
virtual ~MyClass(){};
virtual void Method1(string var1);
virtual float Method2(float var2);
};
还有一个相关的 .pyx 文件:
cdef class PyClass:
cdef MyClass *classptr
[standard __cinit__ and __dealloc__ declarations ]
cdef int Attribute1;
def Method1(self, var1):
self.classptr.Method1(var1)
... 和 pxd 文件:
cdef extern from "mycode.h":
cdef cppclass MyClass:
MyClass() except +
int Attribute1
void Method1(string)
我使用 setup.py 创建一个 .so 库以导入 python 模块。
请注意,尽管 MyClass::Method2 和 MyClass::Attribute2 存在于 c++ 中,但我没有在 Cython 中提及它们,因此它们在 .so 库中不可见。也许我这样做是因为它们被 MyClass::Method1() 间接使用,或者只是因为我不打算在 python 代码中调用它们。
这是一种可能导致问题/奇怪行为的不良做法吗? 如果有,为什么?
【问题讨论】: