我知道不可能为基本类型重载(流)运算符,如下所示:
std::ostream & operator<<(std::ostream &stream, const double s) {
stream << std::scientific << std::showpos << std::setprecision(15) << std::to_string(s);
return stream;
}
为基本类型定义全局格式化选项的首选方法是什么?请注意,我想将格式应用于任何类型的输出流,而不仅仅是像 std::cout
这样的特定流。欢迎使用 C++11 解决方案。有什么提示吗?
最佳答案
您可以定义自己的操纵器来设置流格式器。您的操纵器必须符合 <<
预期的格式运算符(operator):
basic_ostream& operator<<(
std::basic_ostream<CharT,Traits>& (*func)(std::basic_ostream<CharT,Traits>&) );
例如:
template <class Char>
basic_ostream<Char>& format_double(basic_ostream<Char>& stream) {
return stream << std::scientific
<< std::showpos
<< std::setprecision(15);
}
然后做:
cout << format_double << 2.0;
引用资料
- << operator特例(9)
注意事项
操纵器有两种格式,一种采用ios_base
作为参数,另一个是 basic_ostream
.您必须使用后者,因为未指定 setprecision(int)
的返回值是什么.例如,我的编译器 (gcc-4.9) 返回一个结构 _Setprecision
持有整数并定义特定的运算符 <<
对于这个结构和 basic_ostream
.
关于c++ - float 的全局格式化选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32944908/