我想让std::cout
在每次输出操作后插入换行符。例如,这样做:
std::cout << 1 << 2 << 3;
或
std::cout << 1;
std::cout << 2;
std::cout << 3;
应输出:
1
2
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;