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

标签 swig

我正在使用 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/

相关文章:

php - 如何为 SWIG 设计界面?

python - 在 pythoncode block 中使用模块定义的常量

c# - 将C#文件包装到DLL中

c# - 如何从我的 C# 单元测试中通过 SWIG 调试到 Quantlib

java - 如何使用 JNI 或 JNA 读取窗口标题?

python - SWIG 将参数传递给 python 回调函数

c# - 构建 .NET 包装器是否需要源代码?

python - 使用 SWIG 从包装的 cpp 文件创建 DLL

python - 使用 SWIG 将 C++ 对象指针传递给 Python,而不是再次传回 C++

python - MEX 相当于 Python(C 包装函数)