相信不少C++程序员初次看到下面的写法时,一定留下了深刻印象:
#include<iostream>
using namespace std;
int main() {
cout << "Hello World!" << endl;
}
至少,对于当时从C语言转向学习C++的我是深感震惊,如此形象直观的输出方式,简直是黑科技。
那么如何在自定义类上来仿照ostream的这种输出特性呢?
直接上代码:
CMyStream.h:
class CMyStream
{
public:
typedef void (CMyStream::*PFunc)();
CMyStream& operator<<(PFunc pFunc);
template<typename T>
CMyStream& operator<<(T Val)
{
std::stringstream ss;
ss<<Val;
m_str+=ss.str();
return *this;
}
void MyEndl();
private:
std::string m_str;
}
extern CMyStream::PFunc Endl;
CMyStream.cpp:
CMyStream::PFunc Endl = &CMyStream::Endl;
CMyStream& operator<<(PFunc pFunc)
{
(this->*pFunc)();
return *this;
}
void CMyStream::Endl(void)
{
std::cout<<m_str<<std::endl;
m_str = "";
}
————————————————
版权声明:本文为CSDN博主「NXGG」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/norman_irsa/article/details/102990577