Add a testcase for the Curiously Recurring Template Pattern - CRTP

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@13839 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2012-09-13 20:15:03 +00:00
parent d1bc8b5b21
commit 323f841d93
3 changed files with 85 additions and 0 deletions

View File

@ -152,6 +152,7 @@ CPP_TEST_CASES += \
cpp_nodefault \
cpp_static \
cpp_typedef \
curiously_recurring_template_pattern \
default_args \
default_arg_values \
default_constructor \

View File

@ -0,0 +1,55 @@
%module curiously_recurring_template_pattern
// Test Curiously Recurring Template Pattern - CRTP
%inline %{
template <typename T> class Base {
int base1Param;
int base2Param;
public:
Base() : base1Param(0) {}
int getBase1Param() {
return base1Param;
}
T& setBase1Param(int value) {
base1Param = value;
return *static_cast<T*>(this);
}
int getBase2Param() {
return base2Param;
}
T& setBase2Param(int value) {
base2Param = value;
return *static_cast<T*>(this);
}
virtual ~Base() {}
};
%}
%template(basederived) Base<Derived>;
%inline %{
class Derived : public Base<Derived> {
int derived1Param;
int derived2Param;
public:
Derived() : derived1Param(0), derived2Param(0) {}
int getDerived1Param() {
return derived1Param;
}
Derived& setDerived1Param(int value) {
derived1Param = value;
return *this;
}
int getDerived2Param() {
return derived2Param;
}
Derived& setDerived2Param(int value) {
derived2Param = value;
return *this;
}
};
%}

View File

@ -0,0 +1,29 @@
import curiously_recurring_template_pattern.*;
public class curiously_recurring_template_pattern_runme {
static {
try {
System.loadLibrary("curiously_recurring_template_pattern");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
System.exit(1);
}
}
public static void main(String argv[]) {
Derived d = new Derived();
d.setBase1Param(1).setDerived1Param(10).setDerived2Param(20).setBase2Param(2);
if (d.getBase1Param() != 1)
throw new RuntimeException("fail");
if (d.getDerived1Param() != 10)
throw new RuntimeException("fail");
if (d.getBase2Param() != 2)
throw new RuntimeException("fail");
if (d.getDerived2Param() != 20)
throw new RuntimeException("fail");
}
}