मैं सी ++ में रणनीति पैटर्न को लागू करने का सबसे अच्छा तरीका बता रहा हूं।सीडी + में रणनीति पैटर्न को कैसे लागू करें std :: function
class AbstractStrategy{
public:
virtual void exec() = 0;
}
class ConcreteStrategyA{
public:
void exec();
}
class ConcreteStrategyB{
public:
void exec();
}
class Context{
public:
Context(AbstractStrategy* strategy):strategy_(strategy){}
~Context(){
delete strategy;
}
void run(){
strategy->exec();
}
private:
AbstractStrategy* strategy_;
वस्तुओं की ओर इशारा कर रहा बुरा व्यवहार में परिणाम कर सकते हैं, मैं देख रहा था: अब तक, मैं हमेशा मानक तरीका है, इस प्रकार जहां संदर्भ आधार रणनीति वर्ग के लिए एक सूचक है का उपयोग किया है इस पैटर्न को लागू करने के लिए एक सुरक्षित तरीका के लिए और मुझे this question मिला जहां std::function
इस पैटर्न को संभालने के बेहतर तरीके के रूप में प्रस्तावित किया गया है।
क्या कोई व्यक्ति बेहतर तरीके से समझा सकता है कि std::function
काम करता है, शायद रणनीति पैटर्न के साथ एक उदाहरण के साथ?
इस मामले में, आप एफ (रणनीति) को कैसे कार्यान्वित करेंगे? और आपको std :: move का उपयोग करने की आवश्यकता क्यों है? – gcswoosh
@ गैब्रिलेक्सवोश रणनीति केवल ऑपरेटर() 'ओवरलोडेड के साथ कोई फ़ंक्शन पॉइंटर या ऑब्जेक्ट है।मेरा उदाहरण एक लैम्ब्डा पास करता है (जो 'शून्य ऑपरेटर()() const' को परिभाषित करता है)। 'std :: move' एक प्रति को रोकने के लिए है। – rightfold