...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::relaxed_get — Retrieves a value of a specified type from a given
variant
. Unlike strict_get does not assert at compile time
that type U
is one of the types that can be stored in variant.
// In header: <boost/variant/get.hpp> template<typename U, typename T1, typename T2, ..., typename TN> U * relaxed_get(variant<T1, T2, ..., TN> * operand); template<typename U, typename T1, typename T2, ..., typename TN> const U * relaxed_get(const variant<T1, T2, ..., TN> * operand); template<typename U, typename T1, typename T2, ..., typename TN> U & relaxed_get(variant<T1, T2, ..., TN> & operand); template<typename U, typename T1, typename T2, ..., typename TN> const U & relaxed_get(const variant<T1, T2, ..., TN> & operand); template<typename U, typename T1, typename T2, ..., typename TN> U && relaxed_get(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.
Recomendation: Use
get
or strict_get
in new code.
strict_get
provides more compile time checks and its behavior is closer to std::get
from C++ Standard Library.
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 preferred due to its greater safety, get may
may be more convenient in some cases due to its straightforward
usage. |