diff options
Diffstat (limited to 'Examples/test-suite/cpp11_variadic_templates.i')
-rw-r--r-- | Examples/test-suite/cpp11_variadic_templates.i | 81 |
1 files changed, 72 insertions, 9 deletions
diff --git a/Examples/test-suite/cpp11_variadic_templates.i b/Examples/test-suite/cpp11_variadic_templates.i index 15ab4eece..e561ad805 100644 --- a/Examples/test-suite/cpp11_variadic_templates.i +++ b/Examples/test-suite/cpp11_variadic_templates.i @@ -4,9 +4,21 @@ using variadic number of classes. */ %module cpp11_variadic_templates -%warnfilter(SWIGWARN_CPP11_VARIADIC_TEMPLATE) MultiArgs; -%warnfilter(SWIGWARN_CPP11_VARIADIC_TEMPLATE) SizeOf; -%warnfilter(SWIGWARN_CPP11_VARIADIC_TEMPLATE) MultiInherit; +%warnfilter(SWIGWARN_JAVA_MULTIPLE_INHERITANCE, + SWIGWARN_CSHARP_MULTIPLE_INHERITANCE, + SWIGWARN_D_MULTIPLE_INHERITANCE, + SWIGWARN_PHP_MULTIPLE_INHERITANCE, + SWIGWARN_RUBY_MULTIPLE_INHERITANCE) MultiInherit; +%warnfilter(SWIGWARN_JAVA_MULTIPLE_INHERITANCE, + SWIGWARN_CSHARP_MULTIPLE_INHERITANCE, + SWIGWARN_D_MULTIPLE_INHERITANCE, + SWIGWARN_PHP_MULTIPLE_INHERITANCE, + SWIGWARN_RUBY_MULTIPLE_INHERITANCE) NumerousInherit; +%warnfilter(SWIGWARN_JAVA_MULTIPLE_INHERITANCE, + SWIGWARN_CSHARP_MULTIPLE_INHERITANCE, + SWIGWARN_D_MULTIPLE_INHERITANCE, + SWIGWARN_PHP_MULTIPLE_INHERITANCE, + SWIGWARN_RUBY_MULTIPLE_INHERITANCE) LotsInherit; //////////////////////// // Variadic templates // @@ -24,7 +36,6 @@ class MultiArgs<int, std::vector<int>, std::map<std::string, std::vector<int>>> %} -// TODO %template (MultiArgs1) MultiArgs<int, std::vector<int>, std::map<std::string, std::vector<int>>>; //////////////////////// @@ -36,7 +47,10 @@ template<typename... Args> struct SizeOf { }; %} -%template (SizeOf1) SizeOf<int, int>; +%template (SizeOf0) SizeOf<>; +%template (SizeOf1) SizeOf<int>; +%template (SizeOf2) SizeOf<int, int>; +%template (SizeOf3) SizeOf<int, int, int>; ////////////////////////// // Variadic inheritance // @@ -60,18 +74,67 @@ public: int b; }; +class C { +public: + C() { + c = 300; + } + virtual ~C() {} + int c; +}; + +class D { +public: + D() { + d = 400; + } + virtual ~D() {} + int d; +}; + template <typename... BaseClasses> class MultiInherit : public BaseClasses... { public: MultiInherit(BaseClasses&... baseClasses) : BaseClasses(baseClasses)... {} + void MultiInstanceMethod(BaseClasses&... baseClasses) {} + static void MultiStaticMethod(BaseClasses&... baseClasses) {} int InstanceMethod() { return 123; } static int StaticMethod() { return 456; } }; %} - -// TODO -//%template (MultiInherit0) MultiInherit<>; +%template (MultiInherit0) MultiInherit<>; %template (MultiInherit1) MultiInherit<A>; -// TODO %template (MultiInherit2) MultiInherit<A,B>; +%template (MultiInherit3) MultiInherit<A,B,C>; + +%inline %{ +template <typename... BaseClasses> class NumerousInherit : public BaseClasses... { +public: + NumerousInherit(int i, BaseClasses&... baseClasses) : BaseClasses(baseClasses)... {} + void NumerousInstanceMethod(int i, BaseClasses&... baseClasses) {} + static void NumerousStaticMethod(int i, BaseClasses&... baseClasses) {} + int InstanceMethod() { return 123; } + static int StaticMethod() { return 456; } +}; +%} + +%template (NumerousInherit0) NumerousInherit<>; +%template (NumerousInherit1) NumerousInherit<A>; +%template (NumerousInherit2) NumerousInherit<A,B>; +%template (NumerousInherit3) NumerousInherit<A,B,C>; + +%inline %{ +template <typename T, typename... BaseClasses> class LotsInherit : public T, public BaseClasses... { +public: + LotsInherit(T t, BaseClasses&... baseClasses) : BaseClasses(baseClasses)... {} + void LotsInstanceMethod(T t, BaseClasses&... baseClasses) {} + static void LotsStaticMethod(T t, BaseClasses&... baseClasses) {} + int InstanceMethod() { return 123; } + static int StaticMethod() { return 456; } +}; +%} +%template (LotsInherit1) LotsInherit<A>; +%template (LotsInherit2) LotsInherit<A,B>; +%template (LotsInherit3) LotsInherit<A,B,C>; +%template (LotsInherit4) LotsInherit<A,B,C,D>; |