如何在Cython中调用C++类的基类构造函数?
在Cython中调用C++基类的带参构造函数
要让Cython生成的Child类在C++构造函数初始化列表中调用Base(int)构造函数,直接在Child的__init__方法中显式调用基类的带参构造函数即可,具体实现如下:
示例代码
cdef extern from "foo.h": cppclass Base: Base(int i) # 唯一构造函数 cdef cppclass Child(Base): # 定义带参数的构造函数,调用基类的Base(int) __init__(int i): Base(i)
如果需要固定参数调用基类构造函数,也可以这么写:
cdef cppclass Child(Base): __init__(): Base(42) # 固定传递42给Base的构造函数
原理说明
Cython会自动将__init__方法中对基类构造函数的调用,转换为C构造函数初始化列表中的代码。比如第一个示例生成的C代码会是:
Child::Child(int i) : Base(i) { // 对应__init__方法中的其他逻辑(此处为空) }
完全满足你需要的初始化列表初始化基类的要求。
内容的提问来源于stack exchange,提问作者Mike Graham
相关产品推荐
相关产品推荐

