मैं हाल ही में सी ++ में डीआई और आईओसी के बारे में पढ़ रहा हूं। मैं थोड़ा उलझन में हूं (यहां एसओ पर संबंधित प्रश्न पढ़ने के बाद भी) और कुछ स्पष्टीकरण की उम्मीद कर रहा था।सी ++ में नियंत्रण और निर्भरता इंजेक्शन के बीच अंतर क्या है?
मुझे ऐसा लगता है कि एसटीएल और बूस्ट के साथ परिचित होने के नाते निर्भरता इंजेक्शन की काफ़ी उपयोग करने के लिए ले जाता है। उदाहरण के लिए, मान लीजिए कि मैं एक समारोह है कि संख्या की श्रेणी के माध्य पाया बनाया करते हैं:
template <typename Iter>
double mean(Iter first, Iter last)
{
double sum = 0;
size_t number = 0;
while (first != last)
{
sum += *(first++);
++number;
}
return sum/number;
};
इस है (अर्थात, बजाय iterators का उपयोग कर संग्रह में ही एक्सेस करने वाले) निर्भरता इंजेक्शन? नियंत्रण का उलटा? न तो?
चलो एक और उदाहरण देखें। हमारे पास एक वर्ग है:
class Dice
{
public:
typedef boost::mt19937 Engine;
Dice(int num_dice, Engine& rng) : n_(num_dice), eng_(rng) {}
int roll()
{
int sum = 0;
for (int i = 0; i < num_dice; ++i)
sum += boost::uniform_int<>(1,6)(eng_);
return sum;
}
private:
Engine& eng_;
int n_;
};
यह निर्भरता इंजेक्शन की तरह लगता है। लेकिन क्या यह नियंत्रण में उलटा है?
इसके अलावा, अगर मुझे कुछ याद आ रहा है, तो क्या कोई मेरी मदद कर सकता है? यह चीजों को करने का प्राकृतिक तरीका प्रतीत होता है, इसलिए यदि निर्भरता इंजेक्शन के लिए यह सब कुछ है, तो लोगों का उपयोग करने में कठिन समय क्यों होता है?
क्या आपने विकी पढ़ी है? आईओसी/डी http://en.wikipedia.org/wiki/Inversion_of_control – CDSO1
सी ++ में, हम आईओसी या डीआई नहीं करते हैं - हमारे पास अपनी खुद की भयानक और बुरी तरह से अवधारणाएं हैं। –
यदि आप सावधान नहीं हैं तो आपका टेम्पलेट फ़ंक्शन विभाजित हो सकता है। –