是否有从生成的类名中删除SWIGTYPE部分并替换为另一个字符串文字?
即。将SWIGTYPE_p_ex_session.java更改为ex_session.java(剥离生成的“SWIGTYPE_p _”)
SWIG .i文件:
%module Example
%{
#include "ExampleApi.h"
struct ex_session{};
%}
%include "ExampleApi.h"
ExampleApi.h包含以下内容:
typedef struct ex_session session_t;
答案 0 :(得分:1)
假设这里真正的问题是“丑陋的名字”,那么我将通过确保SWIG在生成包装器时至少有一个空的定义(不仅仅是声明)来解决这个问题,例如给定:
%module test
class ExampleNiceName;
typedef ExampleNiceName example_t;
void func(example_t);
SWIG生成SWIGTYPE_p_ExampleNiceName.java
我们可以通过以下方式使这一点变得更好:
class ExampleNiceName {};
而不是
class ExampleNiceName;
在此示例中,导致SWIG生成ExampleNiceName.java
作为包装类型。它不会暴露任何比以前暴露更多的东西,并且完全合法/合理。我们告诉SWIG不仅仅是“这种类型存在”,而是“这种类型存在,我们希望你通过这样做来包装它的名字”。
您还可以使用%rename
使Java端的名称与C ++类名不同,例如:
%rename(JavaClassName) ExampleNiceName;
class ExampleNiceName {};
使用上一个示例将导致JavaClassName
代替生成的Java中的ExampleNiceName
。