File: extend_template_method.i

package info (click to toggle)
swig 4.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 42,876 kB
  • sloc: cpp: 61,013; ansic: 27,612; java: 14,670; python: 10,632; cs: 8,103; makefile: 6,287; yacc: 6,197; sh: 5,247; ruby: 5,172; perl: 3,541; php: 2,069; ml: 2,066; lisp: 1,894; javascript: 1,300; tcl: 1,091; xml: 115
file content (92 lines) | stat: -rw-r--r-- 2,220 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
%module extend_template_method

%include <std_string.i>

%inline %{
namespace Space {
class ExtendMe {
public:
  ExtendMe() {}
  template <typename T>
  T do_stuff_impl(int a, T b, double d) {
    return b;
  }
};
}
%}

%extend Space::ExtendMe {
  template<typename T>
  T do_stuff(int a, T b) {
    return $self->do_stuff_impl(a, b, 4.0);
  }
  template<typename T>
  T do_overloaded_stuff(T b) {
    return $self->do_stuff_impl(0, b, 4.0);
  }
  template<typename T>
  static T static_method(T t) {
    return t;
  }
  template<typename T>
  ExtendMe(T x) {
    Space::ExtendMe *em = new Space::ExtendMe();
    return em;
  }
}
%template(do_stuff_double) Space::ExtendMe::do_stuff<double>;
%template(do_stuff_string) Space::ExtendMe::do_stuff<std::string>;

%template(do_overloaded_stuff) Space::ExtendMe::do_overloaded_stuff<std::string>;
%template(do_overloaded_stuff) Space::ExtendMe::do_overloaded_stuff<double>;

%template(static_method) Space::ExtendMe::static_method<int>;

%template(ExtendMe) Space::ExtendMe::ExtendMe<int>;

%inline %{
namespace Space {
template<typename X>
class TemplateExtendMe {
public:
  TemplateExtendMe() {}
  template <typename T>
  T template_stuff_impl(X a, T b, double d) {
    return b;
  }
};
}
%}

%extend Space::TemplateExtendMe {
  template<typename T>
  T do_template_stuff(int a, T b) {
    return $self->template_stuff_impl(a, b, 4.0);
  }
  template<typename T>
  T do_template_overloaded_stuff(T b) {
    return $self->template_stuff_impl(0, b, 4.0);
  }
  template<typename T>
  static T static_template_method(T t) {
    return t;
  }
  template<typename T>
  TemplateExtendMe(T x) {
    Space::TemplateExtendMe<X> *em = new Space::TemplateExtendMe<X>();
    return em;
  }

%template(do_template_stuff_double) do_template_stuff<double>;
%template(do_template_stuff_string) do_template_stuff<std::string>;

%template(do_template_overloaded_stuff) do_template_overloaded_stuff<std::string>;
%template(do_template_overloaded_stuff) do_template_overloaded_stuff<double>;

%template(static_template_method) static_template_method<int>;

%template(TemplateExtendMe) Space::TemplateExtendMe::TemplateExtendMe<int>;
}

%template(TemplateExtend) Space::TemplateExtendMe<int>;