%module template_default_class_parms_typedef // Based on template_default_class_parms testcase but using typedefs in template %feature("python:nondynamic"); #ifdef SWIGOCAML %warnfilter(SWIGWARN_PARSE_KEYWORD) method; #endif %inline %{ namespace Space { struct SomeType {}; struct AnotherType {}; template<typename CC, typename DD = SomeType, typename EE = int> class Bar { public: typedef CC C; typedef DD D; typedef EE E; C CType; D DType; E EType; // Use typedef with no qualifiers Bar(C c, D d, E e) {} C method(C c, D d, E e) { return c; } // Use typedef with classname qualifiers Bar(bool, typename Bar::C c, typename Bar::D d, typename Bar::E e) {} typename Bar::C method_1(typename Bar::C c, typename Bar::D d, typename Bar::E e) { return c; } // Use typedef with classname and full template parameter qualifiers Bar(bool, bool, typename Bar<CC, DD, EE>::C c, typename Bar<CC, DD, EE>::D d, typename Bar<CC, DD, EE>::E e) {} typename Bar<CC, DD, EE>::C method_2(typename Bar<CC, DD, EE>::C c, typename Bar<CC, DD, EE>::D d, typename Bar<CC, DD, EE>::E e) { return c; } // Use typedef with namespace and classname and full template parameter qualifiers Bar(bool, bool, bool, typename Space::Bar<CC, DD, EE>::C c, typename Space::Bar<CC, DD, EE>::D d, typename Space::Bar<CC, DD, EE>::E e) {} typename Space::Bar<CC, DD, EE>::C method_3(typename Space::Bar<CC, DD, EE>::C c, typename Space::Bar<CC, DD, EE>::D d, typename Space::Bar<CC, DD, EE>::E e) { return c; } }; template<typename TT = SomeType> class Foo { public: typedef TT T; T TType; // Use typedef with no qualifiers Foo(T t) {} T method(T t) { return t; } // Use typedef with classname qualifiers Foo(const T &, T t) {} typename Foo::T method_A(typename Foo::T t) { return t; } // Use typedef with classname and full template parameter qualifiers Foo(const typename Foo<TT>::T &, const typename Foo<TT>::T &, typename Foo<TT>::T t) {} typename Foo<TT>::T method_B(typename Foo<TT>::T t) { return t; } // Use typedef with namespace and classname and full template parameter qualifiers Foo(const typename Foo<TT>::T &, const typename Foo<TT>::T &, const typename Foo<TT>::T &, typename Foo<TT>::T t) {} typename Foo<TT>::T method_C(typename Foo<TT>::T t) { return t; } }; template<typename T = int> class ATemplate {}; template<typename T> struct UsesBar { void use_A(typename Bar<T>::C, typename Bar<T>::D, typename Bar<T>::E) {} void use_B(const typename Bar<T>::C &, const typename Bar<T>::D &, const typename Bar<T>::E &) {} void use_C(typename Space::Bar<T>::C, typename Space::Bar<T>::D, typename Space::Bar<T>::E) {} void use_D(const typename Space::Bar<T>::C &, const typename Space::Bar<T>::D &, const typename Space::Bar<T>::E &) {} }; } %} // Use defaults %template(DefaultBar) Space::Bar<double>; %template(DefaultFoo) Space::Foo<>; // Don't use all defaults %template(BarAnotherTypeBool) Space::Bar<Space::AnotherType, bool>; %template(FooAnotherType) Space::Foo<Space::AnotherType>; %template() Space::ATemplate<>; %template(UsesBarDouble) Space::UsesBar<double>;
Generated by dwww version 1.15 on Tue Jul 2 00:34:09 CEST 2024.