cython php,【整理】Cython返回C/C++ struct类型数据 | 勤奋的小青蛙

在封装中,我们可能会返回c/c++ struct类型的数据,那么其实最好的办法就是通过dict进行返回即可。

我想使用C ++代码返回C struct类型数据。但是我遇到了一个编译错误:

error: ‘__pyx_convert__to_py_Test’ has not been declared

难道我不能在Cython环境里用struct?

Cython生成的代码如下:

static PyObject* __pyx_convert__to_py_Test::mydata(struct Test::mydata s);

下面是其中示例代码:

libmy.h:

namespace Test {

struct mydata {

int id;

char name[256];

};

class Myclass {

mydata _data;

public:

const mydata & get_data() const;

};

}

libmy.cpp:

namespace Test {

const mydata & Myclass::get_data() const {

return const_cast(_data);

}

}

test.pxd:

cdef extern from "libmy.h" namespace "Test":

cdef struct mydata:

int id

char* name

cdef cppclass Myclass:

const mydata & get_data()

test.pyx:

cimport test as my

cdef class Py_Myclass:

cdef my.Myclass *thisptr

def __cinit__(self):

self.thisptr = new my.Myclass()

def __dealloc__(self):

del self.thisptr

def get_data(self):

return self.thisptr.get_data()

setup.py:

setup(

ext_modules = cythonize([Extension("mylib", ["mylib.pyx"], language="c++", libraries=["my"])])

)

当我在test.pxd文件中使用‘cppclass’替代‘struct’时,我遇到一个错误:

Cannot convert 'mydata const  &' to Python object

于是我把:

cdef struct mydata:

改为:

cdef cppclass mydata:

最好的方式应该是:

我应该在'test.pyx'文件中创建一个包含C++ struct信息的python对象。

def get_data(self):

d = self.thisptr.get_data()

data = {}

data["id"] = d.id

data["name"] = d.name

return data

我也将C struct更改为'test.pxd'文件中的'cppclass'。

cdef cppclass mydata:

int id

char* name

文章的脚注信息由WordPress的wp-posturl插件自动生成

|2|left

打赏

1b6439c6a040252321edad911c85491b.png微信扫一扫,打赏作者吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值