我正在使用javacode typemap来添加一些额外的函数来代替SWIG生成的函数。我想删除SWIG为unsigned char mac[6];
结构的public short[] getMac()
(public void setMac(short[] value)
和details_t_
)生成的默认getter和setter。我尝试使用%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;
答案 0 :(得分:4)
不要使用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;