如何使用这个操纵器

Mic*_*ael 6 c++ manipulators

这是一个学校的练习,所以请提供一些提示,没有完整的例子;-)

我有自己的操纵者:

template<typename T, typename Tr=char_traits<T> >
ios_base& toggle(basic_ios<T,Tr>& io)
{
    if(io.flags() & ios::scientific)
    { io.unsetf(ios::scientific); io.flags(ios::fixed); }
    else { io.unsetf(ios::fixed); io.flags(ios::scientific); }
    return io;
 }
Run Code Online (Sandbox Code Playgroud)

我写了这个,因为我必须用表单编写一个操纵器ios_base& my_manip(basic_ios&).

如果我像这样使用它(不使用返回值):

toggle(cout);
Run Code Online (Sandbox Code Playgroud)

......工作正常 但如果我这样使用它:

toggle(cout) << 54444.6456555 << endl;
Run Code Online (Sandbox Code Playgroud)

这不起作用(因为std :: ios_base没有如下所述的operator <<()).

一般来说,我没有得到ios_base& my_manip(basic_ios&)有用的东西......你有一个提示/例子吗?


你们已经帮了我很多!我仍然不明白,是通过basic_ios和回馈的动机ios_base(因为建议在我必须解决的练习中做...).什么可能是使用这个???

Die*_*ühl 4

操纵器的问题是它返回一个std::ios_base&而不是std::ostream&您可以写入的。您可以更改操纵器以采用std::ostream&as 参数并返回收到的引用。但是,输出流类定义了采用函数指针的输出运算符:

std::ostream& std::ostream::operator<< (std::ios_base& (*)(std::ios_base&)) { ... }
Run Code Online (Sandbox Code Playgroud)

也就是说,您可以按照几乎相同的方式插入操纵器,例如std::hex

std::cout << std::hex << 123 << ' ' << std::dec << 123 << '\n';
Run Code Online (Sandbox Code Playgroud)