【发布时间】:2014-02-07 19:16:11
【问题描述】:
我有一个像这样的传统 C/C++ 结构(还有许多其他成员):
struct S {
char one_name[MAX_LEN];
char names[N_NAMES][MAX_LEN];
}
以及创建这些的 C 函数:
S *get_S(...)
我想通过 swig 导出 S 和名称,以便我可以在 python 中执行此操作:
s = MyModule.get_S()
print s.one_name # I have this working
print s.names[1] # should print the 2nd string, this is harder
我认为我需要某种类型映射,但我是新来的 swig。我可以使用 SWIG/python array inside structure 中的 Wrapped_array 模板执行 one_name,但我不确定如何将其扩展到字符串数组。我只需要从 python 中读取这些字符串(如上所述),而不是编写它们。我可以用访问器来做,所以 python 看起来像:
print s.get_name(i) # prints the ith name
但我更喜欢数组接口,因为它类似于 C 接口。
【问题讨论】:
-
您是否有理由不使用 std::string? SWIG 会自动处理它。
-
@Schollii:我无法更改要包装的底层接口;这是古老的C代码。如果需要,我可以编写一个访问器函数,而不是直接公开字符串数组。我只是希望我能以 Python 的方式公开它,但尽可能与现有的 C 代码相似,以便用户熟悉它。