template<typename T1, typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
class etl::variant< T1, T2, T3, T4, T5, T6, T7, T8 >
A template class that can store any of the types defined in the template parameter list. Supports up to 8 types.
Public Types |
typedef uint_least8_t | type_id_t |
| The type used for ids.
|
|
typedef reader_type< T1, T2, T3, T4, T5, T6, T7, T8 > | reader |
| The base type for derived readers.
|
|
Public Member Functions |
| ~variant () |
| Destructor.
|
|
| variant () |
|
template<typename T > |
| variant (const T &value) |
|
| variant (const variant &other) |
|
template<typename T , typename TP1 > |
T & | emplace (const TP1 &value1) |
| Emplace with one constructor parameter.
|
|
template<typename T , typename TP1 , typename TP2 > |
T & | emplace (const TP1 &value1, const TP2 &value2) |
| Emplace with two constructor parameters.
|
|
template<typename T , typename TP1 , typename TP2 , typename TP3 > |
T & | emplace (const TP1 &value1, const TP2 &value2, const TP3 &value3) |
| Emplace with three constructor parameters.
|
|
template<typename T , typename TP1 , typename TP2 , typename TP3 , typename TP4 > |
T & | emplace (const TP1 &value1, const TP2 &value2, const TP3 &value3, const TP4 &value4) |
| Emplace with four constructor parameters.
|
|
template<typename T > |
variant & | operator= (const T &value) |
|
variant & | operator= (const variant &other) |
|
bool | is_same_type (const variant &other) const |
|
template<typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 > |
bool | is_same_type (const variant< U1, U2, U3, U4, U5, U6, U7, U8 > &other) const |
|
void | call (reader &r) |
|
bool | is_valid () const |
|
template<typename T > |
bool | is_type () const |
|
size_t | index () const |
| Gets the index of the type currently stored or UNSUPPORTED_TYPE_ID.
|
|
void | clear () |
| Clears the value to 'no valid stored value'.
|
|
template<typename T > |
T & | get () |
|
template<typename T > |
const T & | get () const |
|
template<typename TBase > |
TBase * | upcast_ptr () |
|
template<typename TBase > |
TBase & | upcast () |
|
template<typename TBase > |
const TBase * | upcast_ptr () const |
|
template<typename TBase > |
const TBase & | upcast () const |
|
template<typename TBase > |
bool | is_base_of () const |
| Check that TBase is a base class of the current variant value.
|
|
| operator T1 & () |
| Conversion operators for each type.
|
|
| operator T2 & () |
|
| operator T3 & () |
|
| operator T4 & () |
|
| operator T5 & () |
|
| operator T6 & () |
|
| operator T7 & () |
|
| operator T8 & () |
|
Static Public Member Functions |
template<typename T > |
static bool | is_supported_type () |
|
Static Public Attributes |
static const type_id_t | UNSUPPORTED_TYPE_ID = etl::integral_limits<type_id_t>::max |
| The id a unsupported types.
|
|
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
Default constructor. Sets the state of the instance to containing no valid data.
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
template<typename T >
etl::variant< T1, T2, T3, T4, T5, T6, T7, T8 >::variant |
( |
const T & |
value | ) |
|
|
inline |
Constructor that catches any types that are not supported. Forces a ETL_STATIC_ASSERT.
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
Calls the supplied reader instance. The 'read' function appropriate to the current type is called with the stored value.
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
template<typename T >
Gets the value stored as the specified template type. Throws a variant_incorrect_type_exception if the actual type is not that specified.
- Returns
- A reference to the value.
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
template<typename T >
const T & etl::variant< T1, T2, T3, T4, T5, T6, T7, T8 >::get |
( |
| ) |
const |
|
inline |
Gets the value stored as the specified template type. Throws a variant_incorrect_type_exception if the actual type is not that specified.
- Returns
- A const reference to the value.
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
bool etl::variant< T1, T2, T3, T4, T5, T6, T7, T8 >::is_same_type |
( |
const variant< T1, T2, T3, T4, T5, T6, T7, T8 > & |
other | ) |
const |
|
inline |
Checks if the type is the same as the current stored type. For variants with the same type declarations.
- Returns
- true if the types are the same, otherwise false.
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
template<typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 >
bool etl::variant< T1, T2, T3, T4, T5, T6, T7, T8 >::is_same_type |
( |
const variant< U1, U2, U3, U4, U5, U6, U7, U8 > & |
other | ) |
const |
|
inline |
Checks if the type is the same as the current stored type. For variants with differing declarations.
- Returns
- true if the types are the same, otherwise false.
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
template<typename T >
static bool etl::variant< T1, T2, T3, T4, T5, T6, T7, T8 >::is_supported_type |
( |
| ) |
|
|
inlinestatic |
Checks if the template type is supported by the implementation of variant..
- Returns
- true if the type is supported, otherwise false.
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
template<typename T >
bool etl::variant< T1, T2, T3, T4, T5, T6, T7, T8 >::is_type |
( |
| ) |
const |
|
inline |
Checks to see if the type currently stored is the same as that specified in the template parameter.
- Returns
- true if it is the specified type, otherwise false.
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
bool etl::variant< T1, T2, T3, T4, T5, T6, T7, T8 >::is_valid |
( |
| ) |
const |
|
inline |
Checks whether a valid value is currently stored.
- Returns
- true if the value is valid, otherwise false.
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
template<typename T >
Assignment operator for T1 type.
- Parameters
-
value | The value to assign. |
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
variant & etl::variant< T1, T2, T3, T4, T5, T6, T7, T8 >::operator= |
( |
const variant< T1, T2, T3, T4, T5, T6, T7, T8 > & |
other | ) |
|
|
inline |
Assignment operator for variant type.
- Parameters
-
other | The variant to assign. |
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
template<typename TBase >
TBase & etl::variant< T1, T2, T3, T4, T5, T6, T7, T8 >::upcast |
( |
| ) |
|
|
inline |
Gets the value stored as the specified template type.
- Returns
- A reference to the value.
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
template<typename TBase >
const TBase & etl::variant< T1, T2, T3, T4, T5, T6, T7, T8 >::upcast |
( |
| ) |
const |
|
inline |
Gets the value stored as the specified template type.
- Returns
- A const reference to the value.
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
template<typename TBase >
TBase * etl::variant< T1, T2, T3, T4, T5, T6, T7, T8 >::upcast_ptr |
( |
| ) |
|
|
inline |
Gets the value stored as the specified template type.
- Returns
- A pointer to the value.
template<typename T1 , typename T2 = etl::null_type<2>, typename T3 = etl::null_type<3>, typename T4 = etl::null_type<4>, typename T5 = etl::null_type<5>, typename T6 = etl::null_type<6>, typename T7 = etl::null_type<7>, typename T8 = etl::null_type<8>>
template<typename TBase >
const TBase * etl::variant< T1, T2, T3, T4, T5, T6, T7, T8 >::upcast_ptr |
( |
| ) |
const |
|
inline |
Gets the value stored as the specified template type.
- Returns
- A const pointer to the value.