| Front Page / Metafunctions / Miscellaneous / inherit |
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;
};
Returns an unspecified class type publically derived from T1, T2,... Tn. Guarantees that derivation from empty_base is always a no-op, regardless of the position and number of empty_base classes in T1, T2,... Tn.
#include <boost/mpl/inherit.hpp>
| Parameter | Requirement | Description |
|---|---|---|
| T1, T2,... Tn | A class type | Classes to derived from. |
For artibrary class types t1,t2,... 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,t2,... 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,t2,... tn are complete types. |
|---|---|
| Return type: | A class type. |
| Semantics: | Equivalent to typedef inheritn<t1,t2,...tn>::type r; |
Amortized constant time.
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 > ));