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

时间:2013-06-28 14:39:26

标签: c++ stream iostream

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

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

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

应输出:

  

1
  2
  3个

我该怎么做?

3 个答案:

答案 0 :(得分:2)

一种可能性是创建自己的简单流式包装器。您需要一个模板化的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;
}

答案 1 :(得分:0)

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

#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

答案 2 :(得分:0)

不太好但你可以尝试使用它。基本上,我试图重载运算符'&lt;&lt;'。。

#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;