Home | Libraries | People | FAQ | More |
template<typename U, typename T1, typename T2, ..., typename TN> U * get(variant<T1, T2, ..., TN> * operand); template<typename U, typename T1, typename T2, ..., typename TN> const U * get(const variant<T1, T2, ..., TN> * operand); template<typename U, typename T1, typename T2, ..., typename TN> U & get(variant<T1, T2, ..., TN> & operand); template<typename U, typename T1, typename T2, ..., typename TN> const U & get(const variant<T1, T2, ..., TN> & operand);
The get
function allows run-time checked,
type-safe retrieval of the content of the given
variant
. The function succeeds
only if the content is of the specified type U
, with
failure indicated as described below.
Warning: After either
operand
or its content is destroyed (e.g., when the
given variant
is assigned a
value of different type), the returned reference is invalidated.
Thus, significant care and caution must be extended when handling
the returned reference.
Notes:
As part of its guarantee of type-safety, get
enforces const
-correctness. Thus, the specified type
U
must be const
-qualified whenever
operand
or its content is likewise
const
-qualified. The converse, however, is not required:
that is, the specified type U
may be
const
-qualified even when operand
and its
content are not.
Returns:
If passed a pointer, get
returns a pointer to
the value content if it is of the specified type U
;
otherwise, a null pointer is returned. If passed a reference,
get
returns a reference to the value content if it is of
the specified type U
; otherwise, an exception is thrown
(see below).
Throws:
Overloads taking a
variant
pointer will not
throw; the overloads taking a
variant
reference throw
bad_get
if the content is not of
the specified type U
.
Rationale:
While visitation via
apply_visitor
is generally prefered due to its greater safety, get
may
may be more convenient in some cases due to its straightforward
usage.
Copyright © 2002, 2003 Eric Friedman, Itay Maman |