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

标签 python c swig void-pointers

我用 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 *'

最佳答案

如果您只想使用 %extendPyObject 传递给某些内容,您可以修改您所拥有的内容并只需编写以下内容:

%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/

相关文章:

python - Pandas 根据列的函数选择行

python - 将具有重叠索引但从不重叠值的 Pandas DataFrames 连接起来

python - 如何使用 Django ModelForm 将数据提交到数据库?

c - 为什么文件的字符数相同时文件大小不同?

c - 用c画正弦波?

c++ - 通过 SWIG 从 Ruby 调用 C++ 函数

c++ - 使用 SWIG 在 Lua 中实现和继承 C++ 类

python - 正则表达式向后匹配任何内容,直到字符串第一次出现

c - 位图加载器无法正确显示颜色

用于 swig : how enable c++11 的 Python 和 c++11