0

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

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

或者

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

应该输出:

1
2
3

我该怎么做?

4

3 回答 3

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;
}
于 2013-06-28T14:44:20.923 回答
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

不幸的是,我无法让它为 one-liner 工作stream << 1 << 2 << 3

于 2013-06-28T15:35:12.100 回答
0

不是很好,但你可以尝试使用它。基本上,我试图重载运算符'<<'。

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

于 2013-06-28T16:14:30.043 回答