2013-08-05 8 views
8

अगर मैंएक ट्यूपल तत्व के प्रकार का सूचकांक प्राप्त करें?

std::tuple<T0, T1, T2, ...> 

और कैसे की तरह अलग अलग तत्व प्रकार के साथ एक टपल एक तत्व प्रकार के सूचकांक प्राप्त करने के लिए है?

template<class T, class Tuple> 
struct Index 
{ 
    enum {value = ?;} 
}; 

धन्यवाद।

+0

यदि आपके पास 'std :: tuple है और आप' int' के लिए पूछते हैं तो क्या होता है? इसके अलावा आपको इसकी आवश्यकता क्यों है? – Borgleader

+0

मुझे लगता है कि ट्यूपल के पास विभिन्न तत्व प्रकार हैं। अगर ऐसी कोई धारणा नहीं है, तो कोई भी मैच ठीक है। मैं इसे एक बेस क्लास के व्युत्पन्न वर्गों को एक कुशल सार कारखाने को लागू करने के लिए उपयोग करता हूं। – user1899020

+0

क्या आप इसे किसी विशिष्ट वातावरण के लिए ढूंढ रहे हैं, या केवल सामान्य सी ++? – css

उत्तर

12
template <class T, class Tuple> 
struct Index; 

template <class T, class... Types> 
struct Index<T, std::tuple<T, Types...>> { 
    static const std::size_t value = 0; 
}; 

template <class T, class U, class... Types> 
struct Index<T, std::tuple<U, Types...>> { 
    static const std::size_t value = 1 + Index<T, std::tuple<Types...>>::value; 
}; 

See it live at Coliru

यह कार्यान्वयन किसी दिए गए प्रकार की पहली घटना का सूचकांक देता है। एक प्रकार की अनुक्रमणिका के लिए पूछना जो ट्यूपल में नहीं है संकलन त्रुटि में परिणाम (और उस पर काफी बदसूरत)।

+0

यदि कोई प्रकार तत्व प्रकारों में से एक नहीं है, तो व्यवहार क्या है? – user1899020

+0

@ user1899020 [संकलन-समय त्रुटि।] (Http://coliru.stacked-crooked.com/view?id=00d44c11b2bfb4ce09cd43c8bfe57739-c944ac6b0eed3bfc48b1f78a894f6965) – Casey

+0

मैं 'std :: cout <<" अनुक्रमणिका = " << इंडेक्स :: value << std :: endl; ' कोलिरु में लेकिन 1. – user1899020

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