x::optional_arg_or
#include <x/optional_args.H> struct optional_coords { int x; int y; optional_coords(int x, int y) : x{x}, y{y} {} }; struct optional_size { int w; int h; optional_size(int w, int h) : w{w}, h{h} {} }; void adjust_pos_or_size(x::optional_args<optional_coords, optional_size> &args) { std::optional<optional_coords> default_coords; std::optional<optional_size> default_size; optional_coords &coords=x::optional_arg_or<optional_coords>( args, default_coords, 0, 0 ); optional_size &coords=x::optional_arg_or<optional_size>( args, default_size, 0, 0 );
x::optional_arg_or
()
returns the constructed option using
x::optional_arg
().
The second parameter is a default constructed instance of the
corresponding
x::optional
type
,
which is used to construct
an instance of the default value of type
if the corresponding option in the
x::optional_args
does not exist.
x::optional_arg
returns a reference to
the type
, either to the constructed type in
the x::optional_args
, or in the
x::optional
default value.
The default value gets emplace
()d into the
x::optional<type>
parameter, with
any additional parameters getting forwarded to
emplace
().
The above example returns the
optional_coords
and
optional_size
from the args
, or from the
corresponding std::optional
value,
passing a pair of goose eggs to the optional values' constructors,
if they're used.
Passing a constant
x::optional_args
returns a reference to a
constant object.
A reference to a constant object always gets returned from
a x::optional_argconstrefs
,
even a mutable one.