/tags/rel-1-3-15/SWIG/Examples/test-suite/template_ns4.i
Swig | 66 lines | 55 code | 11 blank | 0 comment | 0 complexity | 99634660bf0d8aac347340d8d91144ae MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
1%module template_ns4
2
3%inline %{
4 namespace hello {
5
6 class Double {
7 };
8
9 template <class ArgType, class ResType>
10 struct Function
11 {
12 char *test() { return (char *) "test"; }
13 };
14
15 template <class AF, class RF>
16 struct ArithFunction : Function<AF, RF>
17 {
18 };
19
20 template <class ArgType, class ResType>
21 struct traits
22 {
23 };
24
25 template <class ArgType>
26 struct traits<ArgType, double>
27 {
28 typedef ArgType arg_type;
29 typedef double res_type;
30 typedef ArithFunction<ArgType, double> base;
31 };
32
33 template <class ArgType>
34 struct traits<ArgType, Double>
35 {
36 typedef ArgType arg_type;
37 typedef Double res_type;
38 typedef ArithFunction<ArgType, Double> base;
39 };
40
41 template <class AF, class RF>
42 class Class : public ArithFunction< typename traits<AF, RF>::arg_type,
43 typename traits<AF, RF>::res_type >
44 {
45 };
46
47 template <class AF, class RF>
48 typename traits<AF, RF>::base
49 make_Class()
50 {
51 return Class<AF, RF>();
52 }
53
54 }
55%}
56 namespace hello {
57 //
58 // This complains only when using a namespace
59 //
60 %template() traits<Double,Double>;
61 %template(Function_DD) Function <Double, Double>;
62 %template(ArithFunction_DD) ArithFunction <Double, Double>;
63 %template(Class_DD) Class <Double, Double>;
64 %template(make_Class_DD) make_Class <Double, Double>;
65 }
66