gpt4 book ai didi

swig - 从结构 Java 类中删除 SWIG 生成的 Getter/Setter

转载 作者:行者123 更新时间:2023-12-01 12:55:50 28 4
gpt4 key购买 nike

我正在使用 javacode 类型映射来添加一些附加函数来代替 SWIG 生成的函数。我想删除 SWIG 为 unsigned char mac[6]; 生成的默认 getter 和 setter(public short[] getMac()public void setMac details_t_ 结构的 (short[] value))。我尝试使用 %ignore details_t_::setMac; 指令,但它不起作用。有什么建议可以作为执行此操作的适当技术吗?

%module Test
%typemap(javacode) struct details_t_ %{
public String getMacAddress() {
return Test.getMacAddressAsString(this); //another API in Test.java
}

%};

%rename (Details) details_t_;
typedef struct details_t_ {
uint16_t code;
char *name;
sockaddr *saddr;
uint32_t saddr_len;
uint8_t flag;
ios_boolean is_child;
unsigned char mac[6];
} details_t;

最佳答案

不要用 setter 和 getter 说 %ignore,而是直接命名字段本身,例如:

%module Test
%typemap(javacode) struct details_t_ %{
public String getMacAddress() {
return Test.getMacAddressAsString(this); //another API in Test.java
}

%};

// Ignore field, not get/sets
%ignore details_t_::mac;
%rename (Details) details_t_;
typedef struct details_t_ {
uint16_t code;
char *name;
sockaddr *saddr;
uint32_t saddr_len;
uint8_t flag;
ios_boolean is_child;
unsigned char mac[6];
} details_t;

如果你想让它不可变而不是隐藏(即只有一个getter,没有生成setter)你可以写:

%immutable details_t_::mac;

而不是前面示例中的 %ignore

如果你想让整个结构不可变,你可以这样做:

// Read only, i.e. only getters
%immutable;
%rename (Details) details_t_;
typedef struct details_t_ {
uint16_t code;
char *name;
sockaddr *saddr;
uint32_t saddr_len;
uint8_t flag;
ios_boolean is_child;
unsigned char mac[6];
} details_t;

// Cancel the immutable directive
%mutable;

关于swig - 从结构 Java 类中删除 SWIG 生成的 Getter/Setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9876327/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com