%module template_typemap %typemap(in) Integer1 { /* do nothing */ } %typemap(out) Integer1 { /* do nothing */ } %typemap(in) Integer2 { /* do nothing */ } %typemap(out) Integer2 { /* do nothing */ } %{ typedef int Integer1; %} %inline %{ typedef int Integer2; template struct Foo { T val; T get_val() const { return val; } void set_val(T v) { val = v; } #ifdef SWIG %typemap(in) Foo* "/* in typemap for Foo, with type T */" #endif }; %} %template(Foo_I1) Foo; %template(Foo_I2) Foo; %inline %{ int bar(Foo *foo) { return 0; } %}