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.