C++ 使用效应器或操纵器反转流的一部分(标记之间)

C++ 使用效应器或操纵器反转流的一部分(标记之间),c++,stream,C++,Stream,你好 我想制作一个小程序,使用流效应器和/或操纵器在标记之间反转流的一部分,例如: 由此: cout你不是这样要求的,但我会用另一种方式处理这个问题。与其为流编写某种扩展,为什么不编写一个反转字符串的函数呢 #include <string> #include <iostream> using namespace std; string reverse(const string& str) { return string(str.rbegin(), st

你好

我想制作一个小程序,使用流效应器和/或操纵器在标记之间反转流的一部分,例如:

由此:
cout你不是这样要求的,但我会用另一种方式处理这个问题。与其为流编写某种扩展,为什么不编写一个反转字符串的函数呢

#include <string>
#include <iostream>
using namespace std;

string reverse(const string& str)
{
    return string(str.rbegin(), str.rend());
}

int main()
{
    cout << reverse("asdf") << "\n";
}
#包括
#包括
使用名称空间std;
字符串反转(常量字符串和str)
{
返回字符串(str.rbegin(),str.rend());
}
int main()
{

cout你可以这样做,但它像屁股一样难看:

class revstream: public std::ostream
{
public:
    static std::ostream &start(std::ostream &os)
    {
        return *(new revstream(os));
    }

    static std::ostream &end(std::ostream &rev)
    {
        revstream *actual_rev= dynamic_cast<revstream *>(&rev);

        // logic for reversing output goes here

        std::ostream &result= actual_rev->os;
        delete actual_rev;

        return result;
    }

    revstream(std::ostream &in_os): std::ostream(&reversebuf), os(in_os)
    {
        return;
    }

    std::ostream &os;
    std::stringbuf reversebuf;
};
class revstream:public std::ostream
{
公众:
静态std::ostream&start(std::ostream&os)
{
返回*(新的revstream(os));
}
静态标准::ostream和end(标准::ostream和rev)
{
revstream*实际版本=动态版本(&rev);
//反转输出的逻辑在这里
std::ostream&result=实际版本->操作系统;
删除实际版本;
返回结果;
}
revstream(标准::ostream和in_os):标准::ostream(和reversebuf),os(in_os)
{
回来
}
std::ostream&os;
std::stringbuf reversebuf;
};
您的ostream操纵器必须返回对
ostream
的引用,因此您必须在
revstream::start
中进行分配

class revstream: public std::ostream
{
public:
    static std::ostream &start(std::ostream &os)
    {
        return *(new revstream(os));
    }

    static std::ostream &end(std::ostream &rev)
    {
        revstream *actual_rev= dynamic_cast<revstream *>(&rev);

        // logic for reversing output goes here

        std::ostream &result= actual_rev->os;
        delete actual_rev;

        return result;
    }

    revstream(std::ostream &in_os): std::ostream(&reversebuf), os(in_os)
    {
        return;
    }

    std::ostream &os;
    std::stringbuf reversebuf;
};