2012-03-09 18 views
33
template<typename T> 
class Point 
{ 
public: 
    typedef T value_type; 
    ... 
}; 

मैंने book, pp176 में कोड से ऊपर देखा है।जब हम टेम्पलेट को परिभाषित करते हैं तो 'value_type` को हमेशा परिभाषित करना एक अच्छा अभ्यास है

प्रश्न 1> क्या यह value_type के लिए हमेशा परिभाषा जोड़ने के लिए एक अच्छा अभ्यास है?

Question2> इस कहाँ परिभाषित value_type उपयोग किया जाएगा?

Point<int>::value_type:

उदाहरण के लिए

?

+8

एक उचित सी ++ पुस्तक एक उचित सवाल – Joe

+2

दु: खी है कि यह आजकल तो बहुत ही दुर्लभ है खरीदने, और फिर पूछने के लिए +1। –

उत्तर

15

यह एक है कोई दर्द नहीं होगा, लेकिन यह ज्यादातर केवल कंटेनर (जैसे std::vector), सभी कंटेनर इस typedef और निहित मूल्यों (begin/end तक पहुँचने के लिए एक समान अंतरफलक प्रदान के रूप में, front के लिए समझ में आता है/back), हालांकि यह ज्यादातर में अप्रचलित हो गया है सी ++ 11 auto और decltype साथ। हालांकि, some_template<typename container::value_type> ... कहने के लिए अभी भी क्लीनर है।

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

5

कंटेनरों पर किए गए कार्यों को लिखने के लिए यह अच्छा अभ्यास है। उदाहरण के लिए, अगर मैं स्वैप करने के लिए एक swap समारोह है कि एक कंटेनर (टेम्प्लेट की गई) स्वीकार करता है, और दो सूचकांक लिखा था, तो मैं value_type परिभाषा एक अस्थायी चर को परिभाषित करने के इस्तेमाल कर सकते हैं।

template<typename T> 
void swap(T &container, int i, int j) { 
    typename T::value_type temp = container[i]; 
    container[i] = container[j]; 
    container[i] = temp; 
} 
+2

और सी ++ 11 में, यह 'ऑटो' होगा। :) ध्यान दें कि यह 'स्वैप' का एक बुरा उदाहरण है, लेकिन नेस्टेड 'value_type' typedefs के लिए पर्याप्त है। – Xeo

1

मैं केवल तभी कहूंगा जब यह प्रकार के लिए समझ में आता है। जहां VALUE_TYPE तरीका है क्योंकि कुछ सामान्य एल्गोरिथ्म गलत मान लिया गया यह (किसी प्रकार की एक कंटेनर है मेरे मामले में में हो जाता है मैं मुसीबतों में चलाने है, मैं याद करने के लिए यह बढ़ावा में कुछ एल्गोरिथ्म है कि मान लिया shared_ptr की वजह से एक कंटेनर बहु ​​आइटम कंटेनर था लगते हैं value_type मौजूद है)।

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

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