重载setw()?

时间:2014-09-08 20:05:50

标签: c++ overloading setw

我想要一个setw来获取两个参数并返回最大值。 这可能吗?我该怎么做呢?不寻找代码只是某个方向会很好,因为我无法在线找到明确的答案。

1 个答案:

答案 0 :(得分:3)

我认为你不能重载它,但你当然可以用不同的名称定义自己的类型,然后为它定义<<>>运算符。例如:

struct setw_largest
{
    int _value;
    setw_largest(int value1, int value2) : _value(std::max(value1, value2)) {}
};

template<class _Elem, class _Traits, class _Arg>
inline basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr, const setw_largest& _Manip)
{
    _Istr.width(_Manip._value);
    return _Istr;
}

template<class _Elem, class _Traits, class _Arg>
inline basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr, const setw_largest& _Manip)
{
    _Ostr.width(_Manip._value);
    return _Ostr;
}

std::cin >> setw_largest(1, 2) >> ...;
std::cout << setw_largest(1, 2) << ...;