We use
x += y
instead of
x = x + y
And similarly for *,/,-
and other operators. Well, what about
x min= y
instead of
x = std::min(x, y)
? Is there a commonly-used idiom for this command, not requiring the (impossible) extension of the language with another operator?
It's certainly not idiomatic, but you might be able to use something called named operators (see these Q&As here and here, developed by @Yakk and @KonradRudolph), and write
x <min>= y;
which is made possible by overloading operator<
and operator>
, combined with a clever wrapped named_operator
. The full code is given by the link above, but uses code like
template <typename T1, typename T2, typename F>
inline auto operator >(named_operator_lhs<T1, F> const& lhs, T2 const& rhs)
-> decltype(lhs.f(std::declval<T1>(), std::declval<T2>()))
{
return lhs.f(lhs.value, rhs);
}
Using std::min
as template argument for the template parameter F
, would update the lhs of the expression with the min of the lhs and rhs.
You can't extend the language in this way. The closest you can come is something like:
template <typename T, typename U>
T&
mineq( T& lhs, U rhs )
{
if ( rhs < lhs ) {
lhs = rhs;
}
return lhs;
}
This would allow writing:
mineq( x, y );
I question whether it's worth the bother, however.
NO. There is no such thing, you'll have to do with std::min(x,y);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With