mirror of https://github.com/swig/swig
78 lines
1.7 KiB
OpenEdge ABL
78 lines
1.7 KiB
OpenEdge ABL
/* This testcase checks whether SWIG correctly parses and generates the code
|
|
for variadic templates. This covers the variadic number of arguments inside
|
|
the template brackets, new functions sizeof... and multiple inheritance
|
|
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;
|
|
|
|
////////////////////////
|
|
// Variadic templates //
|
|
////////////////////////
|
|
%inline %{
|
|
#include <vector>
|
|
#include <string>
|
|
#include <map>
|
|
|
|
template<typename... Values>
|
|
class MultiArgs {
|
|
};
|
|
|
|
class MultiArgs<int, std::vector<int>, std::map<std::string, std::vector<int>>> multiArgs;
|
|
|
|
%}
|
|
|
|
// TODO
|
|
%template (MultiArgs1) MultiArgs<int, std::vector<int>, std::map<std::string, std::vector<int>>>;
|
|
|
|
////////////////////////
|
|
// Variadic sizeof... //
|
|
////////////////////////
|
|
%inline %{
|
|
template<typename... Args> struct SizeOf {
|
|
static const int size = sizeof...(Args);
|
|
};
|
|
%}
|
|
|
|
%template (SizeOf1) SizeOf<int, int>;
|
|
|
|
//////////////////////////
|
|
// Variadic inheritance //
|
|
//////////////////////////
|
|
%inline %{
|
|
class A {
|
|
public:
|
|
A() {
|
|
a = 100;
|
|
}
|
|
virtual ~A() {}
|
|
int a;
|
|
};
|
|
|
|
class B {
|
|
public:
|
|
B() {
|
|
b = 200;
|
|
}
|
|
virtual ~B() {}
|
|
int b;
|
|
};
|
|
|
|
template <typename... BaseClasses> class MultiInherit : public BaseClasses... {
|
|
public:
|
|
MultiInherit(BaseClasses&... baseClasses) : BaseClasses(baseClasses)... {}
|
|
int InstanceMethod() { return 123; }
|
|
static int StaticMethod() { return 456; }
|
|
};
|
|
%}
|
|
|
|
|
|
// TODO
|
|
//%template (MultiInherit0) MultiInherit<>;
|
|
%template (MultiInherit1) MultiInherit<A>;
|
|
// TODO
|
|
%template (MultiInherit2) MultiInherit<A,B>;
|
|
|