PageRenderTime 42ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Examples/test-suite/template_default_class_parms_typedef.i

#
Swig | 77 lines | 62 code | 15 blank | 0 comment | 0 complexity | 2e2c21a38bc5ac6b75597c32af88fed0 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. %module template_default_class_parms_typedef
  2. // Based on template_default_class_parms testcase but using typedefs in template
  3. %feature("python:nondynamic");
  4. %inline %{
  5. namespace Space {
  6. struct SomeType {};
  7. struct AnotherType {};
  8. template<typename CC, typename DD = SomeType, typename EE = int> class Bar {
  9. public:
  10. typedef CC C;
  11. typedef DD D;
  12. typedef EE E;
  13. C CType;
  14. D DType;
  15. E EType;
  16. // Use typedef with no qualifiers
  17. Bar(C c, D d, E e) {}
  18. C method(C c, D d, E e) { return c; }
  19. // Use typedef with classname qualifiers
  20. Bar(bool, Bar::C c, Bar::D d, Bar::E e) {}
  21. Bar::C method_1(Bar::C c, Bar::D d, Bar::E e) { return c; }
  22. // Use typedef with classname and full template parameter qualifiers
  23. Bar(bool, bool, Bar<CC, DD, EE>::C c, Bar<CC, DD, EE>::D d, Bar<CC, DD, EE>::E e) {}
  24. Bar<CC, DD, EE>::C method_2(Bar<CC, DD, EE>::C c, Bar<CC, DD, EE>::D d, Bar<CC, DD, EE>::E e) { return c; }
  25. // Use typedef with namespace and classname and full template parameter qualifiers
  26. Bar(bool, bool, bool, Space::Bar<CC, DD, EE>::C c, Space::Bar<CC, DD, EE>::D d, Space::Bar<CC, DD, EE>::E e) {}
  27. Space::Bar<CC, DD, EE>::C method_3(Space::Bar<CC, DD, EE>::C c, Space::Bar<CC, DD, EE>::D d, Space::Bar<CC, DD, EE>::E e) { return c; }
  28. };
  29. template<typename TT = SomeType> class Foo {
  30. public:
  31. typedef TT T;
  32. T TType;
  33. // Use typedef with no qualifiers
  34. Foo(T t) {}
  35. T method(T t) { return t; }
  36. // Use typedef with classname qualifiers
  37. Foo(const T &, T t) {}
  38. Foo::T method_A(Foo::T t) { return t; }
  39. // Use typedef with classname and full template parameter qualifiers
  40. Foo(const Foo<TT>::T &, const Foo<TT>::T &, Foo<TT>::T t) {}
  41. Foo<TT>::T method_B(Foo<TT>::T t) { return t; }
  42. // Use typedef with namespace and classname and full template parameter qualifiers
  43. Foo(const Foo<TT>::T &, const Foo<TT>::T &, const Foo<TT>::T &, Foo<TT>::T t) {}
  44. Foo<TT>::T method_C(Foo<TT>::T t) { return t; }
  45. };
  46. template<typename T = int> class ATemplate {};
  47. template<typename T> struct UsesBar {
  48. void use_A(typename Bar<T>::C, typename Bar<T>::D, typename Bar<T>::E) {}
  49. void use_B(const typename Bar<T>::C &, const typename Bar<T>::D &, const typename Bar<T>::E &) {}
  50. void use_C(typename Space::Bar<T>::C, typename Space::Bar<T>::D, typename Space::Bar<T>::E) {}
  51. void use_D(const typename Space::Bar<T>::C &, const typename Space::Bar<T>::D &, const typename Space::Bar<T>::E &) {}
  52. };
  53. }
  54. %}
  55. // Use defaults
  56. %template(DefaultBar) Space::Bar<double>;
  57. %template(DefaultFoo) Space::Foo<>;
  58. // Don't use all defaults
  59. %template(BarAnotherTypeBool) Space::Bar<Space::AnotherType, bool>;
  60. %template(FooAnotherType) Space::Foo<Space::AnotherType>;
  61. %template() Space::ATemplate<>;
  62. %template(UsesBarDouble) Space::UsesBar<double>;