Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

added boost

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|.

Model of

|Metafunction|

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 > ));

Docutils System Messages

????????????????????????
Note: See TracBrowser for help on using the repository browser.