c++ - How to make this template code work? -
टेम्पलेट कोड इस तरह से है:
टेम्पलेट & lt; class type1 & gt; Struct DefaultInstanceCreator {type1 * ऑपरेटर () () {new type1; }}; टेम्पलेट & lt; क्लास टाइप 1, क्लास इंस्टेंससाइमर = डिफ़ाल्ट इन्स्टेंस क्रिएटर & lt; type1 & gt; & Gt; क्लास ऑब्जेक्ट कैश {सार्वजनिक: ऑब्जेक्ट कैश (इंस्टेंस क्रिएटर एंड इंस्टीस्यूटर्स): इंस्टीट्रेचर (instCreator) {} टाइप 1 * प्राप्त करें () {टाइप 1 * Temp = instCreator_ (); } निजी: InstanceCreator instCreator_; };
यह कोड ऑब्जेक्ट क्लास के साथ अच्छी तरह से काम करता है:
class A {public: A (int num) {number = num; } इंट नंबर; स्ट्रक्चर बनाएँइन्स्टेंस {बनाएँइन्स्टेंस (इंट वैल्यू): value_ (value) {} ए * ऑपरेटर () () कॉन्स्ट {रिटर्न न्यू ए (value_); } Int value_; }; }; objectCache & LT; ए, ए :: बनाएँइंसटाइन & gt; intcache (ए :: CreateInstance (2)); A * temp = intcache.Get (); Cout & lt; & lt; अस्थायी- gt; संख्या & lt; & lt; endl;
जब मैंने इस टेम्पलेट की तरह int, string ...
objectCache & lt; Int & gt; intcache (); Int * temp = intcache.Get (); * Temp = 3; Cout & lt; & lt; temp & lt; & lt; endl;
मुझे "ई 'का बाएं मिलता है।' 'वर्ग / संरचना / संघ होना चाहिए' ', मुझे पता नहीं है कि समस्या कहाँ है
जब मैं बदलता हूँ
ऑब्जेक्ट कैश & lt; Int & gt; intcache;
मुझे "ऑब्जेक्ट कैश" मिलता है: कोई उपयुक्त डिफॉल्ट कन्स्ट्रक्टर उपलब्ध नहीं है
उपयोग
objectCache & lt; Int & gt; intcache (DefaultInstanceCreator & LT; पूर्णांक & gt; ());
मुझे "'के पास छोड़ दिया जाना चाहिए।' 'वर्ग / स्ट्रेट / यूनियन भी हो।' '
यहां, आप पैरामीटर में intcache
कन्स्ट्रक्टर में नहीं जा रहे हैं:
objectCache & lt; Int & gt; intcache (); Int * temp = intcache.Get ();
इसका कारण यह है कि सी ++ की अच्छी तरह से जाना जाने वाली पहली पंक्ति, आप कम से कम intcache
को ऐसे फ़ंक्शन के रूप में घोषित कर रहे हैं जो कोई पैरामीटर और रिटर्न नहीं देता ऑब्जेक्ट कैश & lt; int & gt;
।
शायद आप इसका मतलब:
objectCache & lt; Int & gt; intcache;
लेकिन शायद आप एक कारखाना पास करना चाहते हैं:
objectCache & lt; Int & gt; intcache ((DefaultInstanceCreator & LT; पूर्णांक & gt; ()));
Comments
Post a Comment