gpt4 book ai didi

Cython 中的 C++ 结构继承

转载 作者:可可西里 更新时间:2023-11-01 18:36:11 25 4
gpt4 key购买 nike

我正在用 cython 包装一个 C++ 库。在头文件中,有一些结构继承自其他结构,如下所示:

struct A { 
int a;
};
struct B : A {
int b;
};

这在我的 cdef extern... block 中应该如何显示?

最佳答案

Using C++ in Cython没有提到任何特别的东西:

#file: pya.pyx
cdef extern from "a.h":
cdef cppclass A:
int a
cdef cppclass B(A):
int b

包装类:

#file: pya.pyx
cdef class PyB:
cdef B* thisptr
def __cinit__(self):
self.thisptr = new B();
def __dealloc__(self):
del self.thisptr
property a:
def __get__(self): return self.thisptr.a
def __set__(self, int a): self.thisptr.a = a
property b:
def __get__(self): return self.thisptr.b
def __set__(self, int b): self.thisptr.b = b

例子:

import pyximport; pyximport.install(); # pip install cython

from pya import PyB

o = PyB()
assert o.a == 0 and o.b == 0
o.a = 1; o.b = 2
assert o.a == 1 and o.b == 2

要构建它,您需要指示 pyximport 使用 C++:

#file: pya.pyxbld
import os
from distutils.extension import Extension

dirname = os.path.dirname(__file__)

def make_ext(modname, pyxfilename):
return Extension(name=modname,
sources=[pyxfilename, "a.cpp"],
language="c++",
include_dirs=[dirname])

关于Cython 中的 C++ 结构继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9781572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com