SWIG 更改 C# 的特定类型的字段类型
Posted
技术标签:
【中文标题】SWIG 更改 C# 的特定类型的字段类型【英文标题】:SWIG change type of field of a specific type for C# 【发布时间】:2018-09-03 15:53:34 【问题描述】:假设我在 C/C++ 中有这个:
struct MyType
int foo;
long other;
;
我想在 SWIG 中将字段“foo”的“int”ONLY 更改为 bool!我该怎么做?
我不想更改原始来源。通常,如果它是我的来源,我会改为 bool!
【问题讨论】:
是否应该将其标记为 c/c++ 而不是 C#?另外:如果你……改变它会发生什么? 做到了didideroo! 【参考方案1】:您可以使用%apply
在int foo
上使用bool
类型映射来实现您想要的:
%module test
%apply bool int foo ;
%inline %
struct MyType
int foo;
;
%
在其他更复杂的场景中,您必须编写自己的类型映射来支持这一点,但由于 bool 和 int 在 C++ 中可以隐式转换,因此开箱即用即可编译和工作。
【讨论】:
您好 Flexo,感谢您的回答成功了一半!我必须手动声明所有其他成员,因为其余成员丢失了吗?!?有没有办法只修复这个特定的领域?该结构有更多的字段!问候 @Martin.Martinsson 如果您将%apply
添加到现有的工作界面,那么它已经可以工作了。 %inline
的内容仅用于快速演示。所以你可能只想在你的模块中使用%include
来解析真正的头文件,然后它就可以正常工作了。上面使用的%apply
指令对之后发生的所有名为“foo”的int
s 执行此操作。
只使用“%apply bool int foo ”就可以了!如何仅限于某种类型?谢谢
这仅限于 int 的命名为 foo。您可以使用%apply bool int
轻松地将其应用于所有整数,尽管这可能不是您想要做的,因为它会应用于所有整数,直到您使用 %clear。如果是我,我会编辑 C++ 并为“我想假装是 C# 中的 bool 的整数”添加一个 typedef。如果您要为其执行此操作的类型都仅在一个头文件中,您可以使用解析顺序来控制发生这种情况的位置。如果没有,您仍然可以使用%ignore
和一些复制和粘贴来完成。我可以将其中任何一个添加到答案中,但我强烈推荐第一种方式。以上是关于SWIG 更改 C# 的特定类型的字段类型的主要内容,如果未能解决你的问题,请参考以下文章