Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SWIG更改C的特定类型字段的类型_C#_C++_Swig - Fatal编程技术网

C# SWIG更改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; }; %}

假设我在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;
};
%}

在其他更复杂的情况下,你必须编写自己的类型映射来支持这个,但是既然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”。如果要为其执行此操作的类型仅在一个头文件中,则可以使用解析顺序来控制发生此操作的位置。如果没有,您仍然可以使用%忽略和一些复制粘贴来完成。我可以在答案中添加任何一种,但我强烈推荐第一种方法。