3.0.0
Freundlich's C++ toolkit
Public Types | Public Member Functions
fcppt::variant::object< Types > Class Template Reference

Detailed Description

template<typename Types>
class fcppt::variant::object< Types >

A class that can hold any object from a fixed set of types.

Template Parameters
TypesAn MPL sequence of types that must be CopyConstructible or Movable, Assignable or AssignMovable and complete. It therefore must also not be const.

See the module description for more information.

Public Types

typedef fcppt::variant::detail::std_type< Types > std_type
 
typedef Types types
 The brigand sequence of the possible types. More...
 

Public Member Functions

template<typename U >
 object (U const &)
 Constructs the variant from a value. More...
 
template<typename U , typename = fcppt::variant::detail::disable_object< U, object >>
 object (U &&)
 Move constructs the variant from a value. More...
 
template<typename U >
U const & get_unsafe () const
 Returns a const reference to the held type without any checks. More...
 
template<typename U >
U & get_unsafe ()
 Returns a reference to the held type without any checks. More...
 
fcppt::variant::size_type type_index () const
 Returns the index of the held type. More...
 
bool is_invalid () const
 Returns if the variant is invalid. More...
 
std_typeimpl ()
 
std_type const & impl () const
 

Member Typedef Documentation

◆ std_type

template<typename Types>
typedef fcppt::variant::detail::std_type< Types > fcppt::variant::object< Types >::std_type

◆ types

template<typename Types>
typedef Types fcppt::variant::object< Types >::types

The brigand sequence of the possible types.

Constructor & Destructor Documentation

◆ object() [1/2]

template<typename Types>
template<typename U >
fcppt::variant::object< Types >::object ( U const &  )
explicit

Constructs the variant from a value.

Template Parameters
UMust be a type among types

◆ object() [2/2]

template<typename Types>
template<typename U , typename = fcppt::variant::detail::disable_object< U, object >>
fcppt::variant::object< Types >::object ( U &&  )
explicit

Move constructs the variant from a value.

Move constructs the variant from value.

Template Parameters
UMust be a type among types

Member Function Documentation

◆ get_unsafe() [1/2]

template<typename Types>
template<typename U >
U const& fcppt::variant::object< Types >::get_unsafe ( ) const

Returns a const reference to the held type without any checks.

Template Parameters
UMust be a type among types
Warning
The behaviour is undefined if the variant does not contain U.

◆ get_unsafe() [2/2]

template<typename Types>
template<typename U >
U& fcppt::variant::object< Types >::get_unsafe ( )

Returns a reference to the held type without any checks.

Template Parameters
UMust be a type among types
Warning
The behaviour is undefined if the variant does not contain U.

◆ impl() [1/2]

template<typename Types>
std_type& fcppt::variant::object< Types >::impl ( )

◆ impl() [2/2]

template<typename Types>
std_type const& fcppt::variant::object< Types >::impl ( ) const

◆ is_invalid()

template<typename Types>
bool fcppt::variant::object< Types >::is_invalid ( ) const

Returns if the variant is invalid.

This can only happen if an assignment of a different type throws an exception. There is no way to recover from that, except for falling back to heap allocation. An invalid variant should only be destroyed or assigned to.

◆ type_index()

template<typename Types>
fcppt::variant::size_type fcppt::variant::object< Types >::type_index ( ) const

Returns the index of the held type.

Returns
A runtime index into types of the held type.