%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 { public: typedef t_item alloc_type; }; } template<typename t_item, typename t2> class list_impl_t {}; template<typename t_item, template<typename> class t_alloc = pfc::alloc_fast > 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 handle this now void xx() { typename t_alloc<t_item>::alloc_type atype; // this type is the same as t_item type atype = true; } }; void TestInstantiations() { pfc::array_t<int, pfc::alloc_fast> myArrayInt; list_impl_t<int, pfc::array_t<int, pfc::alloc_fast> > myListImplInt; (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>;
Generated by dwww version 1.15 on Tue Jul 2 00:12:58 CEST 2024.