%module template_default_class_parms #ifdef SWIGOCAML %warnfilter(SWIGWARN_PARSE_KEYWORD) method; #endif %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<>; // Github issue #280 segfault %inline %{ namespace Teuchos { class Describable {}; } namespace KokkosClassic { namespace DefaultNode { struct DefaultNodeType {}; } } namespace Tpetra { template class Map : public Teuchos::Describable { public: typedef LocalOrdinal local_ordinal_type; typedef GlobalOrdinal global_ordinal_type; typedef Node node_type; void test_func(LocalOrdinal, GlobalOrdinal, Node) {} }; } %} #ifdef SWIGJAVA // Fixes still required for other languages %template(MapDefaults) Tpetra::Map<>; #endif %inline %{ namespace Details { template < class LO = ::Tpetra::Map<>::local_ordinal_type, class GO = typename ::Tpetra::Map::global_ordinal_type, class NT = typename ::Tpetra::Map::node_type > class Transfer : public Teuchos::Describable { public: void transfer_func(LO, GO, NT) {} }; } %} // Below is not resolving correctly yet //%template(TransferDefaults) Details::Transfer<>;