【问题标题】:SWIG change type of field of a specific type for C#SWIG 更改 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!

标签: c# c++ swig


【解决方案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 和一些复制和粘贴来完成。我可以将其中任何一个添加到答案中,但我强烈推荐第一种方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 2010-11-06
相关资源
最近更新 更多