Как и почему можно использовать сигналы Boost2?

Изучение c ++ и попытка познакомиться с некоторыми шаблонами.сигналы2 док Очевидно, что у меня есть огромный набор возможностей для слотов и сигналов. Я не понимаю, для каких типов приложений (вариантов использования) я должен их использовать.

Я думаю о том, как конечный автомат отправляет события изменений. Исходя из динамически типизированного фона (C #, Java и т. Д.), Вы будете использовать диспетчер событий или статический реф или обратный вызов.

Есть ли трудности в c ++ с использованием кросс-классных обратных вызовов? Это по сутиПочему сигналы2 существует?

Одним из примеров случаев является документ / представление. Как этот шаблон лучше подходит, чем, скажем, использование вектора функций и вызов каждой из них в цикле, или, скажем, лямбда-выражения, вызывающего изменения состояния в зарегистрированных экземплярах класса прослушивания?

class Document
{
public:
    typedef boost::signals2::signal<void ()>  signal_t;

public:
    Document()
    {}

    /* Connect a slot to the signal which will be emitted whenever
      text is appended to the document. */
    boost::signals2::connection connect(const signal_t::slot_type &subscriber)
    {
        return m_sig.connect(subscriber);
    }

    void append(const char* s)
    {
        m_text += s;
        m_sig();
    }

    const std::string& getText() const
    {
        return m_text;
    }

private:
    signal_t    m_sig;
    std::string m_text;
};

а также

class TextView
{
public:
    TextView(Document& doc): m_document(doc)
    {
        m_connection = m_document.connect(boost::bind(&TextView::refresh, this));
    }

    ~TextView()
    {
        m_connection.disconnect();
    }

    void refresh() const
    {
        std::cout << "TextView: " << m_document.getText() << std::endl;
    }
private:
    Document&               m_document;
    boost::signals2::connection  m_connection;
};

Ответы на вопрос(1)

Ваш ответ на вопрос