C++ 重载setw()?

C++ 重载setw()?,c++,overloading,setw,C++,Overloading,Setw,我想要一个setw获取两个参数并返回最大的参数。 这可能吗?我该怎么做呢?不需要寻找代码,只需要一些方向就可以了,因为我在这行中找不到明确的答案。我不认为您可以重载它,但您当然可以使用不同的名称定义自己的类型,然后为它定义运算符。例如: struct setw_largest { int _value; setw_largest(int value1, int value2) : _value(std::max(value1, value2)) {} }; template&l

我想要一个setw获取两个参数并返回最大的参数。 这可能吗?我该怎么做呢?不需要寻找代码,只需要一些方向就可以了,因为我在这行中找不到明确的答案。

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

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;
}
struct setw\u最大
{
int_值;
setw_最大(int value1,int value2):_值(std::max(value1,value2)){}
};
模板
内联基本istream&运算符>>(基本istream&Istr,常量setw\u最大值和Manip)
{
_Istr.宽度(_Manip._值);
返回Istr;
}
模板
内联基本组和运算符组最大(1,2)>>。。。;
std::cout我不认为您可以重载它,但您当然可以使用不同的名称定义自己的类型,然后为它定义
运算符。例如:

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;
}
struct setw\u最大
{
int_值;
setw_最大(int value1,int value2):_值(std::max(value1,value2)){}
};
模板
内联基本istream&运算符>>(基本istream&Istr,常量setw\u最大值和Manip)
{
_Istr.宽度(_Manip._值);
返回Istr;
}
模板
内联基本组和运算符组最大(1,2)>>。。。;
std::cout我不认为您可以重载它,但您当然可以使用不同的名称定义自己的类型,然后为它定义
运算符。例如:

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;
}
struct setw\u最大
{
int_值;
setw_最大(int value1,int value2):_值(std::max(value1,value2)){}
};
模板
内联基本istream&运算符>>(基本istream&Istr,常量setw\u最大值和Manip)
{
_Istr.宽度(_Manip._值);
返回Istr;
}
模板
内联基本组和运算符组最大(1,2)>>。。。;
std::cout我不认为您可以重载它,但您当然可以使用不同的名称定义自己的类型,然后为它定义
运算符。例如:

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;
}
struct setw\u最大
{
int_值;
setw_最大(int value1,int value2):_值(std::max(value1,value2)){}
};
模板
内联基本istream&运算符>>(基本istream&Istr,常量setw\u最大值和Manip)
{
_Istr.宽度(_Manip._值);
返回Istr;
}
模板
内联基本组和运算符组最大(1,2)>>。。。;

STL主要由头文件和内联实现组成,因此您只需查看
setw()
实现即可了解它的实际功能。下划线+大写字母=保留标识符,[global.names]。这是在StdLib实现中使用的,但是您自己的扩展不应该使用它们。我将解决这个问题,稍后给您反馈。感谢您的帮助。STL主要由头文件和内联实现组成,因此您只需查看
setw()
实现即可了解它的实际功能。下划线+大写字母=保留标识符,[global.names]。这是在StdLib实现中使用的,但是您自己的扩展不应该使用它们。我将解决这个问题,稍后给您反馈。感谢您的帮助。STL主要由头文件和内联实现组成,因此您只需查看
setw()
实现即可了解它的实际功能。下划线+大写字母=保留标识符,[global.names]。这是在StdLib实现中使用的,但是您自己的扩展不应该使用它们。我将解决这个问题,稍后给您反馈。感谢您的帮助。STL主要由头文件和内联实现组成,因此您只需查看
setw()
实现即可了解它的实际功能。下划线+大写字母=保留标识符,[global.names]。这是在StdLib实现中使用的,但是您自己的扩展不应该使用它们。我将解决这个问题,稍后给您反馈。感谢您的帮助。您不能直接重载它,因为它位于命名空间std中(通常禁止在其中添加自定义重载)。我认为可以使用一些名称查找技巧在另一个名称空间中重载它;但我并不认为它比Remy Lebeau的解决方案有什么优势。你不能直接重载它,因为它驻留在命名空间std中(通常禁止在其中添加自定义重载)。我认为可以使用一些名称查找技巧在另一个名称空间中重载它;但我并不认为它比Remy Lebeau的解决方案有什么优势。你不能直接重载它,因为它驻留在命名空间std中(通常禁止在其中添加自定义重载)。我认为可以使用一些名称查找技巧在另一个名称空间中重载它;但我并不认为它比Remy Lebeau的解决方案有什么优势。你不能直接重载它,因为它驻留在命名空间std中(通常禁止在其中添加自定义重载)。我认为可以使用一些名称查找技巧在另一个名称空间中重载它;但我并不认为雷米·勒博的解决方案有什么优势。