SWIG:使用 %typemap(javabase) 并在 java 中调用超级 class 构造函数
SWIG: using %typemap(javabase) and calling super class constructor in java
在 C++ 中
class A{
..
..
}
class B{
..
..
}
现在 java 我可以生成 A.java、B.java classes。现在我想在 java A 中扩展 B。所以我使用了 %typemap(javabase) A "B"。我可以看到 A 在 A.java
中扩展了 B
现在我在 class B 中没有默认构造函数。因此在生成的 A.java 中出现错误
"implicit super constructor B() is undefined."
如果我手动将 super 添加到 A 的生成构造函数中,一切都会正常。但我不想编辑 A.java。
我可以使用 swig 类型映射为 A 生成调用超级构造函数的构造函数吗?
%typemap(javabody) A %{
private long swigCPtr;
protected boolean swigCMemOwn;
protected $javaclassname(long cPtr, boolean cMemoryOwn) {
super(cPtr,cMemoryOwn);
swigCMemOwn = cMemoryOwn;
swigCPtr = cPtr;
}
%}
解决了问题
在 C++ 中
class A{
..
..
}
class B{
..
..
}
现在 java 我可以生成 A.java、B.java classes。现在我想在 java A 中扩展 B。所以我使用了 %typemap(javabase) A "B"。我可以看到 A 在 A.java
中扩展了 B现在我在 class B 中没有默认构造函数。因此在生成的 A.java 中出现错误
"implicit super constructor B() is undefined."
如果我手动将 super 添加到 A 的生成构造函数中,一切都会正常。但我不想编辑 A.java。
我可以使用 swig 类型映射为 A 生成调用超级构造函数的构造函数吗?
%typemap(javabody) A %{
private long swigCPtr;
protected boolean swigCMemOwn;
protected $javaclassname(long cPtr, boolean cMemoryOwn) {
super(cPtr,cMemoryOwn);
swigCMemOwn = cMemoryOwn;
swigCPtr = cPtr;
}
%}
解决了问题