1 %module template_default_class_parms 2 3 #ifdef SWIGOCAML 4 %warnfilter(SWIGWARN_PARSE_KEYWORD) method; 5 #endif 6 7 %inline %{ 8 namespace Space { 9 struct SomeType {}; 10 struct AnotherType {}; 11 template<typename C, typename D = SomeType, typename E = int> class Bar { 12 public: 13 C CType; 14 D DType; 15 E EType; Bar(C c,D d,E e)16 Bar(C c, D d, E e) {} method(C c,D d,E e)17 C method(C c, D d, E e) { return c; } 18 }; 19 template<typename T = SomeType> class Foo { 20 public: 21 T TType; Foo(T t)22 Foo(T t) {} method(T t)23 T method(T t) { return t; } 24 }; 25 template<typename T = int> class ATemplate {}; 26 } 27 %} 28 29 // Use defaults 30 %template(DefaultBar) Space::Bar<double>; 31 %template(DefaultFoo) Space::Foo<>; 32 33 // Don't use all defaults 34 %template(BarAnotherTypeBool) Space::Bar<Space::AnotherType, bool>; 35 %template(FooAnotherType) Space::Foo<Space::AnotherType>; 36 37 %template() Space::ATemplate<>; 38 39 40 // Github issue #280 segfault 41 %inline %{ 42 namespace Teuchos { 43 class Describable {}; 44 } 45 namespace KokkosClassic { 46 namespace DefaultNode { 47 struct DefaultNodeType {}; 48 } 49 } 50 51 namespace Tpetra { 52 template <class LocalOrdinal = int, 53 class GlobalOrdinal = LocalOrdinal, 54 class Node = KokkosClassic::DefaultNode::DefaultNodeType> 55 class Map : public Teuchos::Describable { 56 public: 57 typedef LocalOrdinal local_ordinal_type; 58 typedef GlobalOrdinal global_ordinal_type; 59 typedef Node node_type; test_func(LocalOrdinal,GlobalOrdinal,Node)60 void test_func(LocalOrdinal, GlobalOrdinal, Node) {} 61 }; 62 } 63 %} 64 65 #ifdef SWIGJAVA 66 // Fixes still required for other languages 67 %template(MapDefaults) Tpetra::Map<>; 68 #endif 69 70 %inline %{ 71 namespace Details { 72 template < class LO = ::Tpetra::Map<>::local_ordinal_type, 73 class GO = typename ::Tpetra::Map<LO>::global_ordinal_type, 74 class NT = typename ::Tpetra::Map<LO, GO>::node_type > 75 class Transfer : public Teuchos::Describable { 76 public: transfer_func(LO,GO,NT)77 void transfer_func(LO, GO, NT) {} 78 }; 79 } 80 %} 81 82 // Below is not resolving correctly yet 83 //%template(TransferDefaults) Details::Transfer<>; 84