如何解决由于%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 举报,一经查实,本站将立刻删除。