我想让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;