A min = C++中的习语?

ein*_*ica 6 c++ operator-overloading idiomatic min c++11

我们用

x += y
Run Code Online (Sandbox Code Playgroud)

代替

x = x + y
Run Code Online (Sandbox Code Playgroud)

*,/,-和其他运营商类似.那么,那怎么样

x min= y
Run Code Online (Sandbox Code Playgroud)

代替

x = std::min(x, y)
Run Code Online (Sandbox Code Playgroud)

?这个命令是否有一个常用的习惯用法,不需要用另一个操作符(不可能)扩展该语言?

Tem*_*Rex 21

它当然不是惯用的,但你可以使用一个叫做命名运算符的东西(参见这里这里的问答,由@Yakk和@KonradRudolph开发),然后写

x <min>= y;
Run Code Online (Sandbox Code Playgroud)

这是通过超载operator<operator>巧妙包装的结合而成的named_operator.完整代码由上面的链接给出,但使用的代码如

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);
}
Run Code Online (Sandbox Code Playgroud)

使用std::min模板参数作为模板参数F,将使用lhs和rhs的min更新表达式的lhs.

  • ......这很疯狂......(虽然+1很有趣) (11认同)
  • +1因为它太棒了.你的名字很适合你:D (5认同)
  • OMG OMG OMG OMG我讨厌C++,tralalalaaaa ......(+ 1) (5认同)
  • +1用于展示模板魔法释放出来的神秘力量 (3认同)