C# SWIG更改C的特定类型字段的类型
假设我在C/C++中有这个:C# SWIG更改C的特定类型字段的类型,c#,c++,swig,C#,C++,Swig,假设我在C/C++中有这个: struct MyType { int foo; long other; }; 我只想在SWIG中将foo字段的int改为bool!我该怎么做 我不想更改原始来源。通常,如果是我的消息来源,我会改成bool 您可以使用%apply在int foo上使用bool类型映射来实现您想要的: %module test %apply bool { int foo }; %inline %{ struct MyType { int foo; }; %}
struct MyType {
int foo;
long other;
};
我只想在SWIG中将foo字段的int改为bool!我该怎么做
我不想更改原始来源。通常,如果是我的消息来源,我会改成bool 您可以使用%apply在int foo上使用bool类型映射来实现您想要的:
%module test
%apply bool { int foo };
%inline %{
struct MyType {
int foo;
};
%}
在其他更复杂的情况下,你必须编写自己的类型映射来支持这个,但是既然BoL和int在C++中是隐式转换的,这将编译并工作得很好。p> 是否应该将其标记为c/c++而不是c?还有:如果你。。。就换了吗?真的吗!你好柔印,你的答案是一半的thx!我必须手动声明所有其他成员,因为其余成员都不见了?!?是否只有一种方法可以修复此特定字段?结构有更多的字段!Regards@Martin.Martinsson如果将%apply添加到现有的工作接口,那么它已经可以工作了。%inline的内容仅用于快速演示。因此,您可能只想在模块中使用%include来解析真正的头文件,然后它就可以正常工作了。上面使用的%apply指令对发生在之后的所有名为“foo”的int都执行此操作。只需使用%apply bool{int foo}就可以了!如何仅限于某一类型?THX仅限于int命名的foo。您可以使用%apply bool{int}轻松地将其应用于所有int,尽管这可能不是您想要做的,因为它将应用于所有int,直到您使用%clear。如果是我,我会编辑C++并添加一个TyPulf,用于“我想在C中假装是BoL”。如果要为其执行此操作的类型仅在一个头文件中,则可以使用解析顺序来控制发生此操作的位置。如果没有,您仍然可以使用%忽略和一些复制粘贴来完成。我可以在答案中添加任何一种,但我强烈推荐第一种方法。