c++ 实现 cout 示例

 

复制代码
#include <iostream>
#include <sstream>
#include <string>
class CMyStream {
    public:
        typedef void (CMyStream::* EndlCallback)();
        CMyStream& operator<<(EndlCallback pEndlCallback);

        template<typename T>
        CMyStream& operator<<(T Val) { //buffer the Val into stringstream
            std::stringstream ss;
            ss << Val;
            m_str += ss.str();
            return *this;
        }

        void MyEndl(); //use std::cout to output
        
    private:
        std::string m_str;
};

CMyStream::EndlCallback endl = &CMyStream::MyEndl;

CMyStream& CMyStream::operator<<(CMyStream::EndlCallback pEndlCallback) {
    (this->*pEndlCallback)();
    return *this;
}

void CMyStream::MyEndl(void) {
    std::cout << m_str << std::endl;
    m_str = "";
}

int main() {
    CMyStream cout;
    cout << "hello" << endl;
    cout << "world";//call CMyStream& operator<<(T Val)
    cout <<endl; // endl = &CMyStream::MyEndl 
    //=> so endl is a functor 
    //=> call CMyStream& operator<<(EndlCallback pEndlCallback) override 
    //=>  in function:     (this->*pEndlCallback)();
    //=> at last call to: void CMyStream::MyEndl(void){...}
    return 0;
}
复制代码

 

posted @   Bigben  阅读(572)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2018-12-03 elasticsearch更改mapping(不停服务重建索引)
2018-12-03 elasticsearch篇之mapping
2013-12-03 应该知道的Linux技巧
点击右上角即可分享
微信分享提示