我是swig / python世界的初学者,并试图在python中访问一个C-structure数组,但是我收到以下错误:
TypeError:'bar'对象不支持索引
以下是我要做的简化版本:
foo.h中:
#include <inttypes.h>
typedef struct bar {
uint8_t val;
}bar;
typedef struct foo {
union {
bar b[2];
} u;
}foo;
int fill_foo(foo *);
foo.c的:
#include "foo.h"
int
fill_foo(foo *var)
{
var->u.b[0].val = 10;
var->u.b[1].val = 20;
return 0;
}
foo_test.i:
%module foo_test
%{
#include "foo.h"
%}
%include "foo.h"
foo.py:
import foo_test
f = foo_test.foo()
foo_test.fill_foo(f)
print f.u.b[0]
我已经阅读了一些关于c-arrays和swig的帖子,但我不清楚如何才能解决这个特殊情况。如果有人可以帮助我,我会很高兴。
答案 0 :(得分:0)
经过一番探讨,我发现我需要扩展struct bar来解决问题。我能够使用以下添加到foo_test.i的上面的示例代码。
%extend bar {
const bar __getitem__(int i) {
return $self[i];
}
}
但缺点是我需要为每个用作数组的结构添加这样的扩展。仍然没有弄清楚如何为所有结构阵列一般地解决这个问题。