add tests and fix the value wrapper for opaque types, including the template cases
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@6374 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
8c9152c376
commit
cf81f4a4e9
3 changed files with 134 additions and 9 deletions
|
|
@ -119,6 +119,7 @@ CPP_TEST_CASES += \
|
|||
director_basic \
|
||||
director_detect \
|
||||
director_default \
|
||||
director_enum \
|
||||
director_exception \
|
||||
director_frob \
|
||||
director_finalizer \
|
||||
|
|
@ -288,6 +289,7 @@ CPP_TEST_CASES += \
|
|||
valuewrapper_base \
|
||||
valuewrapper_const \
|
||||
valuewrapper_default \
|
||||
valuewrapper_opaque \
|
||||
varargs \
|
||||
virtual_destructor \
|
||||
virtual_poly \
|
||||
|
|
|
|||
96
SWIG/Examples/test-suite/valuewrapper_opaque.i
Normal file
96
SWIG/Examples/test-suite/valuewrapper_opaque.i
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
%module valuewrapper_opaque
|
||||
|
||||
/*
|
||||
* Opaque types
|
||||
*/
|
||||
%{
|
||||
template<typename T> class TemplateClass {
|
||||
public:
|
||||
TemplateClass<T>(T a) {}
|
||||
};
|
||||
|
||||
struct B
|
||||
{
|
||||
};
|
||||
|
||||
class C
|
||||
{
|
||||
public:
|
||||
C(int){}
|
||||
};
|
||||
%}
|
||||
|
||||
|
||||
/*
|
||||
* Hint swig that the Opaque type B don't need the value wrapper.
|
||||
* This hint is only necessary in very very special cases.
|
||||
*/
|
||||
%feature("novaluewrapper") B;
|
||||
class B;
|
||||
|
||||
|
||||
%inline %{
|
||||
|
||||
class A
|
||||
{
|
||||
public:
|
||||
A(int){}
|
||||
};
|
||||
|
||||
class Klass {};
|
||||
|
||||
|
||||
TemplateClass<Klass> getKlass(Klass k) {
|
||||
TemplateClass<Klass> t(k);
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
TemplateClass<A> getA(A a) {
|
||||
TemplateClass<A> t(a);
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
TemplateClass<B> getA(B b) {
|
||||
TemplateClass<B> t(b);
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
TemplateClass<C> getC(C a) {
|
||||
TemplateClass<C> t(a);
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
TemplateClass<int> getInt(int a) {
|
||||
TemplateClass<int> t(a);
|
||||
return t;
|
||||
}
|
||||
|
||||
A sgetA(A a) {
|
||||
return a;
|
||||
}
|
||||
|
||||
Klass sgetKlass(Klass a) {
|
||||
return a;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
struct auto_ptr
|
||||
{
|
||||
auto_ptr(T a){}
|
||||
};
|
||||
|
||||
auto_ptr<A> getPtrA(auto_ptr<A> a) {
|
||||
return a;
|
||||
}
|
||||
|
||||
B getB(B a) {
|
||||
return a;
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
%template() auto_ptr<A>;
|
||||
Loading…
Add table
Add a link
Reference in a new issue