mirror of https://github.com/swig/swig
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:
parent
d1bc8b5b21
commit
323f841d93
|
@ -152,6 +152,7 @@ CPP_TEST_CASES += \
|
|||
cpp_nodefault \
|
||||
cpp_static \
|
||||
cpp_typedef \
|
||||
curiously_recurring_template_pattern \
|
||||
default_args \
|
||||
default_arg_values \
|
||||
default_constructor \
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
%}
|
||||
|
||||
|
||||
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue