如何制作一个在每次输出操作后插入新行的流



我想让std::cout在每次输出操作后插入一行换行符。例如,这样做:

std::cout << 1 << 2 << 3;

std::cout << 1;
std::cout << 2;
std::cout << 3;

应输出:

1
2
3

我该怎么做?

一种可能性是创建自己的简单流式包装器。您需要一个模板化的operator<<,它将参数转发到std::cout(或其他一些封装流),然后添加一个std::endl

我不会发布整个类,但操作员可能看起来像这样:

template <typename T>
my_stream_class &my_stream_class::operator<<(T const &value) {
    std::cout << value << std::endl;
    return *this;
}

这是我尝试过的。我不知道这是否是最好的方法:

#include <iostream>
template <typename CharT, typename Traits = std::char_traits<CharT>>
struct my_stream : std::basic_ostream<CharT, Traits>
{
    my_stream(std::basic_ostream<CharT, Traits>& str) : os(str) {}
    template <typename T>
    friend std::basic_ostream<CharT, Traits>& operator <<(my_stream& base, T const& t)
    {
        return base.os << t << std::endl;
    }
    std::basic_ostream<CharT, Traits>& os;
};
int main()
{
    my_stream<char> stream(std::cout);
    stream << 1;
    stream << 2;
    stream << 3;
}

输出:

1
2
3

不幸的是,我无法让它为一行stream << 1 << 2 << 3工作。

虽然不太好,但您可以尝试使用它。基本上,我试图使操作员过载<'。

#include <iostream>
using namespace std;
class my_N
{
    private:
       int number;
    public:
       //required constructor
       my_N(){
           number = 0;
       }
       my_N(int N1){
           number = N1;
       }
       friend ostream &operator<<( ostream &output, const my_N &N )
       {
           output << N.number << "n";
           return output;
       }
};
int main()
{
    my_N N1(1), N2(2), N3(3);
    cout << N1;
    cout << N2;
    cout << N3;
    return 1;
}

结果:

1
2
3

它甚至适用于cout << N1 << N2 << N3;

相关内容

  • 没有找到相关文章

最新更新