SWIG - 包装到 C# 时 std::list 没有默认类型映射,我该怎么办?
Posted
技术标签:
【中文标题】SWIG - 包装到 C# 时 std::list 没有默认类型映射,我该怎么办?【英文标题】:SWIG - No default typemap for std::list when wrapping to C#, how can I do? 【发布时间】:2017-04-25 09:52:16 【问题描述】:我目前正在使用 SWIG 将大型 C++ 库包装到 C#。我面临一个大问题,因为我的库使用了大量 std::list,而且似乎 SWIG(我使用的是最新版本 3.0.12)不提供默认映射对于 std::list。我在网上找遍了,一无所获。我很惊讶,因为 std::list 与 C# LinkedList 非常相似!
反正我很久没在SWIG了,所以我真的不知道该怎么做。。我只知道我绝对不能改变所有的std::list 在我的库中,我真的很想将它们包装在 C# LinkedList 中,但我不知道这是否可能以及我是否可以轻松地做到这一点..
我查看了类型映射,但我不确定它是否能正常工作,因为将 std::list 映射到 LinkedList 似乎比使用简单类型映射更复杂..
各位,我需要你给我建议! 提前致谢, 昆汀。
【问题讨论】:
你考虑过 C++ / CLI 吗? 其实我们已经试过这个方案了。但最终,由于多种原因,它并没有达到我们想要的效果。主要原因是我们希望尽可能少地接触 lib 源代码。 【参考方案1】:好吧,对于那些和我一样面临同样问题的人,我最终决定将自己的 std::list 实现转换为 C# LinkedList。
我今天在 SWIG GitHub 上提出了拉取请求。如果有人感兴趣,就去看看吧。它并不完美,但现在可以使用。
【讨论】:
这里是拉取请求的链接:github.com/swig/swig/pull/989以上是关于SWIG - 包装到 C# 时 std::list 没有默认类型映射,我该怎么办?的主要内容,如果未能解决你的问题,请参考以下文章
使用 SWIG 在 Python 中公开 std::list 成员