我在使用cython处理指针时遇到了麻烦。该类的cython实现包含指向类Person
的C ++实例的指针。这是我的.pyx
文件:
person.pyx
cdef class PyPerson:
cdef Person *pointer
def __cinit__(self):
self.pointer=new Person()
def set_parent(self, PyPerson father):
cdef Person new_father=*(father.pointer)
self.c_person.setParent(new_father)
C ++方法setParent
将Person
个对象作为参数。由于pointer
类的属性PyPerson
是指向Person
对象的指针,因此我认为我可以使用*pointer
指向的地址获取对象的语法{ {1}}。但是,当我尝试编译它时,我收到以下错误
*(PyPersonObject.pointer)
有人知道如何在指针的地址找到对象吗? 当我在C ++程序中执行相同操作时,我没有错误。这里是C ++类的实现,以防你想看到它:
person.cpp
def set_parent(self, PyPerson father):
cdef Person new_father=*(father.pointer)
^
------------------------------------------------------------
person.pyx:51:30: Cannot assign type 'Person *' to 'Person'
注意:由于涉及完整课程的其他原因,我无法通过持有Person::Person():parent(NULL){
}
Person::setParent(Person &p){
parent=&p;
}
实例(Person
)来解决此问题。
答案 0 :(得分:3)
我应该阅读有关使用C ++和Cython的整个cython文档。对于那些不知道的人,解除引用运算符*
不能在Cython中使用。相反,您需要从dereference
模块导入cython.operator
。如果要在指向的地址访问对象,则应编写dereference(pointer)
。
具体而言,我的问题的答案是写cdef Person new_father=dereference(father.c_person)
。
答案 1 :(得分:0)
对此的另一种解决方案可能是在位置 import { StatusBar } from "react-native";
...
<StatusBar translucent backgroundColor="transparent" />
的指针中建立索引,以取消对Cython中的指针的引用。
例如,假设我们有一个golden_ratio C double和一个p_double C指针:
0
我们可以使用地址运算符&:将cdef double golden_ratio
cdef double *p_double
地址分配给golden_ratio’s
:
p_double
我们现在可以使用我们的p_double = &golden_ratio
分配给golden_ratio
索引要零引用的语法:
p_double