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
3 changed files with 85 additions and 0 deletions
55
Examples/test-suite/curiously_recurring_template_pattern.i
Normal file
55
Examples/test-suite/curiously_recurring_template_pattern.i
Normal 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;
|
||||
}
|
||||
};
|
||||
%}
|
||||
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue