सी ++ सीखना और कुछ पैटर्न से परिचित होने की कोशिश कर रहा है। signals2 doc में स्पष्ट रूप से स्लॉट्स और सिग्नल के साथ कई चीजें हैं जो मैं कर सकता हूं। मुझे समझ में नहीं आता कि किस प्रकार के अनुप्रयोग (मामलों का उपयोग करें) मुझे इसके लिए उपयोग करना चाहिए।बूस्ट सिग्नल 2 का उपयोग कैसे और क्यों करेगा?
मैं एक राज्य मशीन प्रेषण परिवर्तन घटनाओं की रेखाओं के साथ सोच रहा हूं। गतिशील रूप से टाइप की गई पृष्ठभूमि (सी #, जावा इत्यादि) से आ रहा है, आप एक इवेंट डिस्पैचर या एक स्थिर रेफरी या कॉलबैक का उपयोग करेंगे।
क्या क्रॉस-क्लास कॉलबैक का उपयोग करने के साथ सी ++ में कठिनाइयां हैं? क्या यह अनिवार्य रूप से है क्यों संकेत 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;
};
एक बात के लिए, ** boost.signals2 ** हमारे पास लैम्बास होने से पहले बनाया गया था। हां, अब यह 'वेक्टर <फ़ंक्शन>', और उसके बाद 'push_back() 'lambdas होने के बराबर है। आप कुछ सुविधाएं चाहते हैं, जैसे कि कॉलबैक के उचित क्रम, सिग्नल स्लॉट डिस्कनेक्शन, दोनों ओर से, संकेतों को निलंबित करना आदि; वह तब होगा जब आपको कुछ रैपर की आवश्यकता होगी (जो आश्चर्यजनक रूप से सरल हैं, [यह मैंने लिखा है] (https://bitbucket.org/danielko/simplesignal/src/6557131d489f3d810a39fd4a2f0401bb0dab1922/include/SimpleSignal%2B%2B.hpp?at=default))। –
DanielKO