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】:

您可以使用%applyint foo 上使用bool 类型映射来实现您想要的:

%module test
%apply bool  int foo ;
%inline %
struct MyType 
   int foo;
;
%

在其他更复杂的场景中,您必须编写自己的类型映射来支持这一点,但由于 bool 和 int 在 C++ 中可以隐式转换,因此开箱即用即可编译和工作。

【讨论】:

您好 Flexo,感谢您的回答成功了一半!我必须手动声明所有其他成员,因为其余成员丢失了吗?!?有没有办法只修复这个特定的领域?该结构有更多的字段!问候 @Martin.Martinsson 如果您将%apply 添加到现有的工作界面,那么它已经可以工作了。 %inline 的内容仅用于快速演示。所以你可能只想在你的模块中使用%include 来解析真正的头文件,然后它就可以正常工作了。上面使用的%apply 指令对之后发生的所有名为“foo”的ints 执行此操作。 只使用“%apply bool int foo ”就可以了!如何仅限于某种类型?谢谢 这仅限于 int 的命名为 foo。您可以使用%apply bool int 轻松地将其应用于所有整数,尽管这可能不是您想要做的,因为它会应用于所有整数,直到您使用 %clear。如果是我,我会编辑 C++ 并为“我想假装是 C# 中的 bool 的整数”添加一个 typedef。如果您要为其执行此操作的类型都仅在一个头文件中,您可以使用解析顺序来控制发生这种情况的位置。如果没有,您仍然可以使用%ignore 和一些复制和粘贴来完成。我可以将其中任何一个添加到答案中,但我强烈推荐第一种方式。

以上是关于SWIG 更改 C# 的特定类型的字段类型的主要内容,如果未能解决你的问题,请参考以下文章

使用 SWIG 更改生成的 CS 函数中的返回类型

如何用sql查询某值类型字段各个记录中含有的特定数字?

Db 字段类型和 C# 字段类型?

C#中如何判断一个DateTime类型字段的日期为空?

Elasticsearch 更改已有字段的数据类型,清洗数据

mysql怎么更改字段名