%module template_default_class_parms %inline %{ namespace Space { struct SomeType {}; struct AnotherType {}; template class Bar { public: C CType; D DType; E EType; Bar(C c, D d, E e) {} C method(C c, D d, E e) { return c; } }; template class Foo { public: T TType; Foo(T t) {} T method(T t) { return t; } }; template class ATemplate {}; } %} // Use defaults %template(DefaultBar) Space::Bar; %template(DefaultFoo) Space::Foo<>; // Don't use all defaults %template(BarAnotherTypeBool) Space::Bar; %template(FooAnotherType) Space::Foo; %template() Space::ATemplate<>;