SWIG:向量中包含无法识别的模板类型
我无法从这样的定义中获得有效的 SWIG 输出:
std::vector< namespaceA::refPtr< namespaceB::myObj > >
首先,我有一个 std::vector 的自定义定义
namespace std {
template<class T> class vector {
public:
typedef size_t size_type;
typedef T value_type;
typedef value_type const& const_reference;
/*
....
*/
%rename(add) push_back;
void push_back( const_reference x);
%extend {
const_reference get(int i) {
int size = int(self->size());
if (i>=0 && i<size)
return (*self)[i];
else
return *((T*)NULL);
}
void set(int i, const_reference val) {
int size = int(self->size());
if (i>=0 && i<size)
(*self)[i] = val;
}
}
};
}
在命名空间 A 中,有一个引用指针的模板。我们将其称为refPtr
。 在命名空间 B 中,有一个引用计数类,名为 MyObj
。
当我声明引用计数对象的模板时,SWIG 输出正确的接口:
%template(MyObjRefPtr) namespaceA::refPtr< namespaceB::MyObj > // OK
然后声明我的向量:
%template(MyObjRefPtrVector) std::vector< MyObjRefPtr > > // compiles but inner types not resolved
它编译并 SWIG 生成四种类型:
- SWIGTYPE_p_std_vectorTnamespaceA_refPtrTnamespaceB__MyObj_t_t
- SWIGTYPE_p_MyObjRefPtr
- MyObjRefPtr
- MyObjRefPtrVector
生成的类 MyObjRefPtr 没问题。 类
MyObjRefPtrVector
已生成,但方法 add
、set
和 get
采用 SWIGTYPE_p_MyObjRefPtr
> 作为参数,而不是 MyObjRefPtr
。
有人可以告诉我我的代码哪里错了吗?我就是想不通...
I can't manage to have a valid SWIG output from a definition like this :
std::vector< namespaceA::refPtr< namespaceB::myObj > >
First of all, I have a custom definition of std::vector
namespace std {
template<class T> class vector {
public:
typedef size_t size_type;
typedef T value_type;
typedef value_type const& const_reference;
/*
....
*/
%rename(add) push_back;
void push_back( const_reference x);
%extend {
const_reference get(int i) {
int size = int(self->size());
if (i>=0 && i<size)
return (*self)[i];
else
return *((T*)NULL);
}
void set(int i, const_reference val) {
int size = int(self->size());
if (i>=0 && i<size)
(*self)[i] = val;
}
}
};
}
In the namespace A, there is a template to reference pointers. Let's call it refPtr
.
In the namespace B, there is a ref counted class, called MyObj
.
When I declare a template for a ref counted object, SWIG outputs the correct interface :
%template(MyObjRefPtr) namespaceA::refPtr< namespaceB::MyObj > // OK
Then I declare my vector :
%template(MyObjRefPtrVector) std::vector< MyObjRefPtr > > // compiles but inner types not resolved
It compiles and SWIG generates four types :
- SWIGTYPE_p_std_vectorTnamespaceA_refPtrTnamespaceB__MyObj_t_t
- SWIGTYPE_p_MyObjRefPtr
- MyObjRefPtr
- MyObjRefPtrVector
The generated class MyObjRefPtr
is ok.
The class MyObjRefPtrVector
was generated but the methods add
, set
and get
take a SWIGTYPE_p_MyObjRefPtr
as parameter, instead of MyObjRefPtr
.
Could someone show me where my code is wrong ? I just can't figure it out...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
而不是
模板声明应该是
Instead of
the template declaration should be