2009-09-24 18 views
26

मैं या तो एक unordered_map या std :: मानचित्र टाइप करने की कोशिश कर रहा हूं, यह निर्भर करता है कि TR1 लाइब्रेरी उपलब्ध हैं या नहीं। लेकिन मैं टेम्पलेट पैरामीटर निर्दिष्ट नहीं करना चाहता हूं। जो मैंने अभी तक पढ़ा है, उससे तर्क के बिना टाइप किए गए टेम्पलेट्स तब तक संभव नहीं हैं जब तक कि आधिकारिक सी ++ 0x मानक उपलब्ध न हो। तो क्या इस के लिए किसी को एक सुरुचिपूर्ण कामकाज पता है?टेम्पलेट पैरामीटर निर्दिष्ट किए बिना टेम्पलेट क्लास

#ifdef _TR1 
#include <unordered_map> 
typedef std::tr1::unordered_map MyMap; //error C2976: too few template arguments 
#else 
#include <map> 
typedef std::map MyMap; //error C2976: too few template arguments 
#endif 
+0

यह बहुत करीबी प्रश्न देखें: http://stackoverflow.com/questions/544842/c-typedef-ing-stl और प्रदत्त उत्तरों। टेम्पलेट टाइपपीफ मान्य नहीं हैं C++ कमांड –

+1

बेनोइट - धन्यवाद, यह वही है जो मैं –

+0

के लिए देख रहा था बहुत ही सवाल: http://stackoverflow.com/questions/6907194/how-to-typedef-a-template-class यह एक और है उत्तर जिसका उल्लेख यहां नहीं किया गया है: C++ 11 – Jayesh

उत्तर

36

तरह से मैं इस किया देखा है एक टेम्पलेट struct में typedef रैप करने के लिए है आप जो चाहते हैं उससे थोड़ा अधिक वर्बोज़, लेकिन मेरा मानना ​​है कि यह सी ++ की वर्तमान स्थिति को देखते हुए आवश्यकता को पूरा करता है।

+3

सी ++ में टेम्पलेट टाइपपीफ की कमी को अनुकरण करने का यह सामान्य तरीका है। हालांकि, मैंने "मूल्य" के बजाय टाइपपीफ "टाइप" नाम दिया होगा, यह अधिक सटीक रूप से बोलने लगता है और यह अधिक मूर्खतापूर्ण है। –

+1

कोड अपडेट किया गया, धन्यवाद – fbrereto

4

आपको टाइपपीफ के लिए पूर्ण प्रकार का उपयोग करना होगा।

इसके बजाय #define मैक्रो का उपयोग करें।

template<typename KeyType, typename MappedType> 
struct myMap 
{ 
#ifdef _TR1 
    typedef std::tr1::unordered_map<KeyType, MappedType> type; 
#else 
    typedef std::map<KeyType, MappedType> type; 
#endif 
}; 

फिर अपने कोड में आप यह इतना तरह आह्वान:

myMap<key, value>::type myMapInstance; 

यह हो सकता है

+1

में "उपनाम टेम्पलेट" कभी-कभी पुराने तरीकों से वापस आना सर्वोत्तम होता है। डक्ट टेप प्रोग्रामिंग अपने सर्वश्रेष्ठ पर। –

+4

दुर्भाग्यवश मैक्रोज़ स्कोप का सम्मान नहीं करते हैं। – sellibitze

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