4
我有一个复杂的C++库,我需要暴露给java android应用程序。这个C++库由标准C++类和C++类模板组成。模板类包装C++模板构造函数
库中的模板之一有一个模板构造函数。
因为一个例子是胜过千言万语:
namespace NS1 {
template < class T >
class Bar {
protected:
T mVal;
public:
template< class OtherType >
Bar (const Bar<OtherType>& pOther) {
mVal = pOther.mVal;
}
};
class A {
};
class B : public A {};
}
我用下面痛饮接口文件片段包装这些:
%extend NS1::Bar<A> {
%template(Abar) NS1::Bar::Bar<NS1::A>;
%template(ABar) NS1::Bar::Bar<NS1::B>;
};
%template(ABar) NS1::Bar<NS1::A>;
%extend NS1::Bar<B> {
%template(BBar) NS1::Bar::Bar<NS1::B>;
};
%template(BBar) NS1::Bar<NS1::B>;
我想包装,包括模板的包装构造函数:
public class ABar {
public ABar (ABar other) {...}
public ABar (BBar other) {...}
}
这是好的,问题是扩展指令似乎忽略模板参数,并用这些扩展Bar模板的每个实例。即在BBar
Java类看起来是这样的:
public class BBar {
public BBar (ABar other) {...}
public BBar (BBar other) {...}
}
这是在这种情况下,不正确。
如何将“扩展”绑定到特定的模板实例?
注:
使用在%的命名空间扩展指令(%extend NS1::Bar<NS1::A>{...}
)引起痛饮断言失败。
我试图与这两个痛饮2.0.12和3.0.8
任何线索的人?