由于%rename%规则,SWIG跳过了C ++“已声明访问”方法

问题描述

我正在使用 SWIG 为我的 C ++ 生成 Java 绑定。所讨论的库遵循蛇格命名约定(例如My_class::my_method),该约定通过一组MyClass::myMethod规则转换为Java驼峰命名约定(例如%rename)。

因此,假设我有一个标头,其中定义了两个接口:

class IBase_interface {
public:
    virtual void ok() = 0;

    virtual void not_ok() = 0;
};

/**
 * Note that this is a private inheritance so swig will ignore everything
 */
class Derived : private IBase_interface {
public:
   /**
    * The idea is to expose only wanted methods manually here via C++03 access declarations
    */
    using IBase_interface::ok;
    using IBase_interface::not_ok;
};

如果我的界面文件如下所示:

%module test

%include "Test.h"

我最终得到一个正确生成Derived.java,其中将包含从IBase_interface继承的两个方法

但是,如果我通过在包含之前添加以下行来向接口文件引入命名规则:

%rename("%(lctitle)s",%$isfunction) "";

生成Derived.java将仅包含ok方法,而not_ok将被跳过(因为它被重命名为驼峰大小写,因此using IBase_interface::not_ok停止了任何作用)。

官方文档(http://www.swig.org/Doc1.3/SWIGPlus.html#SWIGPlus_nn35 @ 6.25)似乎可以解释相关问题:

解决重载中的歧义可能会阻止声明 使用

导入

有没有办法解决这个限制?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)