यदि आपके पास अपारदर्शी सूचक टाइपिफ़ है, तो क्या टेम्पलेट्स में उपयोग के लिए गतिशील रूप से इंगित करने के लिए एक तरीका है? उदाहरण के लिए, मान लीजिए कि आप कुछ इस तरह है:मैं एक अपारदर्शी सूचक टाइपिफ़ से साझा_ptr कैसे बना सकता हूं? (या: मैं टाइपेडफ को "अनचाहे" कैसे कर सकता हूं?)
struct Foo; // Forward declared struct
typedef Foo* FooPtr; // Opaque pointer
क्योंकि स्मार्ट सूचक प्रकार सूचक-टू टाइप करें, इस की एक std::shared_ptr
परिभाषित करने के लिए, ऐसा लगता है कि आप क्या कहना है के मामले में टेम्प्लेट उपलब्ध हैं:
std::shared_ptr<struct Foo> theSharedPtr;
क्या इस तरह के पॉइंटर को "मैन्युअल" अपारदर्शी पॉइंटर टाइपपीफ को अनदेखा किए बिना परिभाषित करने का कोई तरीका है? मुझे लगता है कि मैं यहाँ कुछ स्पष्ट याद आ रही किया जाना चाहिए, लेकिन आप इन की तरह कुछ सोच सकता है (ध्यान दें: इन काम नहीं करते):
std::shared_ptr<*FooPtr> theSharedPointer;
// or
std::shared_ptr<pointedto(FooPtr)> theSharedPointer;
मैं इस तरह संभव हो जाना चाहिए लग रहा है। क्या मैं कुछ भूल रहा हूँ? मुझे लगता है कि यह एक आसन्न माथे-मारना पल है ...
संपादित करें: कुछ और चारों ओर Noodling, ऐसा लगता है कि, आम मामले में, shared_ptr<T>
sizeof(T)
लेना चाहता है। आप कन्स्ट्रक्टर को डिलीटर प्रदान करके इसे प्राप्त कर सकते हैं। मुझे संदेह है कि यह थोड़ा बढ़त वाला मामला बनाता है, लेकिन यह अभी भी सी ++ में सभी प्रकार के wrangling के साथ लगता है, मैं हाथ से ऐसा किए बिना एक सूचक प्रकार "अनचाहे" करने में सक्षम होना चाहिए।
अच्छी तरह से आप std :: shared_ptr का उपयोग कर रहे हैं यह स्पष्ट है कि आप C++ 11 में हैं ... मैं वैसे भी अपना बाकी जवाब छोड़ दूंगा। – sbabbi
मुझे उत्तर की पूर्णता पसंद है। –