diff options
Diffstat (limited to 'Examples/test-suite/template_template_parameters.i')
-rw-r--r-- | Examples/test-suite/template_template_parameters.i | 63 |
1 files changed, 61 insertions, 2 deletions
diff --git a/Examples/test-suite/template_template_parameters.i b/Examples/test-suite/template_template_parameters.i index 89197229e..068d74443 100644 --- a/Examples/test-suite/template_template_parameters.i +++ b/Examples/test-suite/template_template_parameters.i @@ -1,7 +1,9 @@ %module template_template_parameters - %inline %{ + +// part 1 + namespace pfc { template<typename t_item, template <typename> class t_alloc> class array_t {}; template<typename t_item> class alloc_fast { @@ -16,7 +18,7 @@ class list_tt : public list_impl_t<t_item,pfc::array_t<t_item,t_alloc> > { public: t_item item; -// typename t_alloc<t_item>::alloc_type allotype; // SWIG can't handle this yet + typename t_alloc<t_item>::alloc_type allotype; // SWIG can handle this now void xx() { typename t_alloc<t_item>::alloc_type atype; // this type is the same as t_item type atype = true; @@ -29,11 +31,68 @@ void TestInstantiations() { (void) myArrayInt; (void) myListImplInt; } + +// part 2 + +template<class T> +struct Container1 { + T x; +}; +template<class U> +struct Container2 { + U x; +}; +template<class BaseT, template<class> class TemplateTemplateT> +struct TestStruct { + TemplateTemplateT<BaseT> x; +}; + +TestStruct<int, Container1> TestStructContainer1Method(TestStruct<int, Container1> ts1) { + ts1.x.x += 10; + return ts1; +} %} + +// part 1 %template(ListImplFastBool) list_impl_t<bool, pfc::array_t<bool, pfc::alloc_fast> >; %template(ListFastBool) list_tt<bool, pfc::alloc_fast>; %template(ListImplFastDouble) list_impl_t<double, pfc::array_t<double, pfc::alloc_fast> >; %template(ListDefaultDouble) list_tt<double>; +%template(BoolAllocFast) pfc::alloc_fast<bool>; +%template(DoubleAllocFast) pfc::alloc_fast<double>; + +// part 2 +%template(IntContainer1) Container1<int>; +%template(FloatContainer2) Container2<float>; +%template(IntTestStruct) TestStruct<int, Container1>; +%template(FloatTestStruct) TestStruct<float, Container2>; + + +// part 3 - from #624 + +#ifdef SWIGJAVASCRIPT +%rename("addTo") operator+=; +#else +%rename("") operator+=; // For Ruby and Octave that ignore operator+= +#endif + +%inline %{ +template<typename T, int dim> struct Foot { + template <template <typename, int> class X, typename U> + void operator+=(X<U, dim> & ref) {} +}; + +void TestInstantiationsPart3() { + Foot<int, 99> MyFootInt99; + MyFootInt99.operator+=<Foot, int>(MyFootInt99); + MyFootInt99 += MyFootInt99; +} +%} + +%template(MyFootInt99) Foot<int, 99>; +%extend Foot<int, 99> { + %template(OperatorPlusEquals) operator+=<Foot, int>; +} |