doc_view.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 114 行

CPP
114
字号
// Document/View sample for Boost.Signals// Copyright Keith MacDonald 2005. Use, modification and// distribution is subject to the Boost Software License, Version// 1.0. (See accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)// For more information, see http://www.boost.org#include <iostream>#include <string>#include <boost/signal.hpp>#include <boost/bind.hpp>class Document{public:    typedef boost::signal<void (bool)>  signal_t;    typedef boost::signals::connection  connection_t;public:    Document()    {}    connection_t connect(signal_t::slot_function_type subscriber)    {        return m_sig.connect(subscriber);    }    void disconnect(connection_t subscriber)    {        subscriber.disconnect();    }    void append(const char* s)    {        m_text += s;        m_sig(true);    }    const std::string& getText() const    {        return m_text;    }private:    signal_t    m_sig;    std::string m_text;};class View{public:    View(Document& m)        : m_document(m)    {        m_connection = m_document.connect(boost::bind(&View::refresh, this, _1));    }    virtual ~View()    {        m_document.disconnect(m_connection);    }    virtual void refresh(bool bExtended) const = 0;protected:    Document&               m_document;private:    Document::connection_t  m_connection;};class TextView : public View{public:    TextView(Document& doc)        : View(doc)    {}    virtual void refresh(bool bExtended) const    {        std::cout << "TextView: " << m_document.getText() << std::endl;    }};class HexView : public View{public:    HexView(Document& doc)        : View(doc)    {}    virtual void refresh(bool bExtended) const    {        const std::string&  s = m_document.getText();        std::cout << "HexView:";        for (std::string::const_iterator it = s.begin(); it != s.end(); ++it)            std::cout << ' ' << std::hex << static_cast<int>(*it);        std::cout << std::endl;    }};int main(int argc, char* argv[]){    Document    doc;    TextView    v1(doc);    HexView     v2(doc);    doc.append(argc == 2 ? argv[1] : "Hello world!");    return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?