gpt4 book ai didi

python - 在 Python SWIG 中包装一个 void * 参数

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:53 24 4
gpt4 key购买 nike

我正在用 Python SWIG 包装这个库,它的函数如下所示:

int set_option(Foo *foo, const char *name, void *value);

在库中,const char *name 映射到我有权查找的类型:intchar *字符**

默认生成的包装代码只接受包装的void *(自然)。

让包装方法接受任何 Python 对象作为参数,并在我自己的 C 代码中进行类型检查和 Python 到 C 转换的最佳方法是什么?

我猜是某种类型映射,可惜我想不出来。

@好东西

In [12]: lib.set_option(foo, "option", "value")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-12-4ccf706b5c50> in <module>()
----> 1 lib.set_option(foo, "option", "value")

TypeError: in method 'set_option', argument 3 of type 'void *'

最佳答案

如果你只想将一个 PyObject 传递给使用 %extend 的东西,你可以修改你已经得到的东西,只需编写以下内容:

%extend Foo {
int set_option(const char *name, PyObject *value) {
// Here value is now a PyObject *, so work with that.
// $self is Foo *foo
return 0;
}
};

不需要类型映射,此函数现在接受任何 Python 输入。你用它做什么取决于你,如果你保留这个对象,你需要增加引用计数。

关于python - 在 Python SWIG 中包装一个 void * 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35124093/

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