从生成的类名称中删除SWIGTYPE

时间:2011-11-18 22:26:01

标签: swig

是否有从生成的类名中删除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;

1 个答案:

答案 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