c++ - float 的全局格式化选项

标签 c++ c++11

我知道不可能为基本类型重载(流)运算符,如下所示:

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;

引用资料

注意事项

操纵器有两种格式,一种采用ios_base作为参数,另一个是 basic_ostream .您必须使用后者,因为未指定 setprecision(int) 的返回值是什么.例如,我的编译器 (gcc-4.9) 返回一个结构 _Setprecision持有整数并定义特定的运算符 <<对于这个结构和 basic_ostream .

关于c++ - float 的全局格式化选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32944908/

相关文章:

c++ - 使用来自类成员的指针初始化二维数组?

c++ 和 <complex.h> 与 <complex> 在单独的文件中

vector 和点之间的 C++ 角度

c++11 - std::pair 的 switch 语句?

c++ - 替换 std::function 的调用值

c++ - 使用可变参数模板和重载 << 运算符编译错误

c++ - ELI5 : What is the data type of `int *p[]`

C++11 vector<bool> 性能问题(附代码示例)

c++ - 为什么要有 move 语义?

c++ - 如何在没有 std::move 的情况下 move 临时对象