From 804603f33868af0450f179f66e2ddb16b84bdb80 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 25 Apr 2011 15:02:43 +0200 Subject: Add support for abstract object types --- common/inheritance/test.hxx | 59 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 7 deletions(-) (limited to 'common/inheritance/test.hxx') diff --git a/common/inheritance/test.hxx b/common/inheritance/test.hxx index 31ef9c1..5ef2ea4 100644 --- a/common/inheritance/test.hxx +++ b/common/inheritance/test.hxx @@ -42,12 +42,9 @@ struct comp: comp_base } }; -#pragma db object -struct base +#pragma db object abstract +struct abstract_base { - #pragma db id auto - unsigned long id_; - comp comp_; unsigned int num_; @@ -56,10 +53,9 @@ struct base std::vector strs_; bool - operator== (const base& y) const + operator== (const abstract_base& y) const { return - id_ == y.id_ && comp_ == y.comp_ && num_ == y.num_ && str_ == y.str_ && @@ -68,6 +64,19 @@ struct base }; #pragma db object +struct base: abstract_base +{ + #pragma db id auto + unsigned long id_; + + bool + operator== (const base& y) const + { + return id_ == y.id_ && static_cast (*this) == y; + } +}; + +#pragma db object struct object1: base { unsigned int num1_; @@ -92,6 +101,8 @@ struct object2: base } }; +// Reference to derived object. +// #pragma db object struct reference { @@ -101,4 +112,38 @@ struct reference object1* o1_; }; +// Multiple inheritance. +// +#pragma db object abstract +struct id_base +{ + #pragma db id auto + unsigned long id_; + + bool + operator== (const id_base& y) const + { + return id_ == y.id_; + } +}; + +#pragma db object +struct object3: abstract_base, id_base +{ + bool + operator== (const object3& y) const + { + return + static_cast (*this) == y && + static_cast (*this) == y; + } +}; + +// Empty derived object. +// +#pragma db object +struct empty: base +{ +}; + #endif // TEST_HXX -- cgit v1.1