source:
downloads/boost_1_33_1/libs/mpl/doc/src/refmanual/inherit.rst
@
12
Last change on this file since 12 was 12, checked in by landauf, 17 years ago | |
---|---|
File size: 3.7 KB |
inherit
Synopsis
template< typename T1, typename T2 > struct inherit2 { typedef |unspecified| type; }; |...| template< typename T1, typename T2,|...| typename Tn > struct inheritn { typedef |unspecified| type; }; template< typename T1 , typename T2 |...| , typename Tn = |unspecified| > struct inherit { typedef |unspecified| type; };
Description
Returns an unspecified class type publically derived from |T1...Tn|. Guarantees that derivation from |empty_base| is always a no-op, regardless of the position and number of |empty_base| classes in |T1...Tn|.
Header
#include <boost/mpl/inherit.hpp>
Model of
Parameters
Parameter | Requirement | Description |
---|---|---|
|T1...Tn| | A class type | Classes to derived from. |
Expression semantics
For artibrary class types |t1...tn|:
typedef inherit2<t1,t2>::type r;
Return type: | A class type. |
---|---|
Precondition: | t1 and t2 are complete types. |
Semantics: | If both t1 and t2 are identical to empty_base, equivalent to typedef empty_base r; otherwise, if t1 is identical to empty_base, equivalent to typedef t2 r; otherwise, if t2 is identical to empty_base, equivalent to typedef t1 r; otherwise equivalent to struct r : t1, t2 {}; |
typedef inheritn<t1,t2,|...|tn>::type r;
Return type: | A class type. |
---|---|
Precondition: | |t1...tn| are complete types. |
Semantics: | Equivalent to struct r : inherit2< inheritn-1<t1,t2,|...|tn-1>::type , tn > { }; |
typedef inherit<t1,t2,|...|tn>::type r;
Precondition: | |t1...tn| are complete types. |
---|---|
Return type: | A class type. |
Semantics: | Equivalent to typedef inheritn<t1,t2,|...|tn>::type r; |
Complexity
Amortized constant time.
Example
struct udt1 { int n; }; struct udt2 {}; typedef inherit<udt1,udt2>::type r1; typedef inherit<empty_base,udt1>::type r2; typedef inherit<empty_base,udt1,empty_base,empty_base>::type r3; typedef inherit<udt1,empty_base,udt2>::type r4; typedef inherit<empty_base,empty_base>::type r5; BOOST_MPL_ASSERT(( is_base_and_derived< udt1, r1> )); BOOST_MPL_ASSERT(( is_base_and_derived< udt2, r1> )); BOOST_MPL_ASSERT(( is_same< r2, udt1> )); BOOST_MPL_ASSERT(( is_same< r3, udt1 > )); BOOST_MPL_ASSERT(( is_base_and_derived< udt1, r4 > )); BOOST_MPL_ASSERT(( is_base_and_derived< udt2, r4 > )); BOOST_MPL_ASSERT(( is_same< r5, empty_base > ));
See also
|Metafunctions|, |empty_base|, |inherit_linearly|, |identity|