2010-08-28 17 views
5

का टाइपपीफ (उपनाम) क्या सी ++ में टेम्पलेट वर्ग का उपनाम बनाने के लिए संभव है (पैरामीटर निर्दिष्ट किए बिना)?जेनेरिक क्लास

typedef std::map myOwnMap; 

काम नहीं करता है।

और यदि नहीं, तो क्या कोई अच्छा कारण है?

+1

मैं सबसे अच्छा तुम क्या है 'का उपयोग कर std :: नक्शा कर सकते हैं लगता है,' स्थानीय नेम स्पेस में 'आयात करने के लिए map'। –

उत्तर

18

में सी ++ 98 और सी ++ 03 typedef केवल एक पूर्ण प्रकार पर इस्तेमाल किया जा सकता है:

typedef std::map<int,int> IntToIntMap; 
सी के साथ ++

है 0x एक नया चमकदार बदलने के लिए वाक्य रचना typedef:

using IntToIntMap = std::map<int,int>; 

जो भी template अलियासिंग का समर्थन करता है:

template < 
    typename Key, 
    typename Value, 
    typename Comparator = std::less<Key>, 
    typename Allocator = std::allocator< std::pair<Key,Value> > 
> 
using myOwnMap = std::map<Key,Value,Comparator,Allocator>; 

यहां आपको :)

6

यह सुविधा सी ++ 0x में पेश की जाएगी, जिसे टेम्पलेट उपनाम कहा जाता है। यह इस तरह दिखेगा:

template<typename Key, typename Value> 
using MyMap = std::map<Key, Value> 
13

टेम्पलेट टाइपपीफ सी ++ 03 मानक में समर्थित नहीं हैं। वहाँ कामकाज से जुड़े हैं, तथापि:

template<typename T> 
struct MyOwnMap { 
    typedef std::map<std::string, T> Type; 
}; 

MyOwnMap<int>::Type map; 
+0

उत्कृष्ट मेटाप्रोग्रामिंग-आधारित उत्तर। +1 – paercebal

+0

परिणामस्वरूप नाम को छोड़कर अधिकतर कम नहीं होगा ... – UncleBens

+0

@Uncle: उन्होंने यह नहीं कहा कि यह लंबाई के उद्देश्यों के लिए था, और उसका उदाहरण समान संख्या में कीस्ट्रोक लेता है। –

संबंधित मुद्दे