...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Convert a value
to a boost::system::result<T>
.
Defined in header <boost/json/value_to.hpp>
template< class T, class Context>result_for
< T,value
>::type try_value_to(value
const& jv, Context const& ctx);
This function attempts to convert a value
to result<T>
using
value
's
accessors, or
tag_invoke
.
Out of the box the function supports types satisfying SequenceContainer,
arrays, arithmetic types, bool
,
std::tuple
, std::pair
,
std::variant
, std::optional
,
std::monostate
, and std::nullopt_t
.
Conversion of other types is done by calling an overload of tag_invoke
found by argument-dependent
lookup. Its signature should be similar to:
template< class FullContext > result<T> tag_invoke( try_value_to_tag<T>, const value&, const Context& , const FullContext& );
or
result<T> tag_invoke( try_value_to_tag<T>, const value&, const Context& );
or
result<T> tag_invoke( try_value_to_tag<T>, const value& );
The overloads are checked for existence in that order and the first that matches will be selected.
If an error occurs during conversion, the result will store the error code
associated with the error. If an exception is thrown, the function will
attempt to retrieve the associated error code and return it, otherwise
it will return error::exception
, unless the exception type
is std::bad_alloc
, which will be allowed to propagate.
The ctx
argument can be
used either as a tag type to provide conversions for third-party types,
or to pass extra data to the conversion function.
! std::is_reference< T >::value
Strong guarantee.
Type |
Description |
---|---|
|
The type to convert to. |
|
The type of context passed to the conversion function. |
Name |
Description |
---|---|
|
The |
|
Context passed to the conversion function. |
jv
converted to result<T>
.
value_to_tag
,
value_to
,
value_from
,
tag_invoke:
A general pattern for supporting customisable functions
Convenience header <boost/json.hpp>