सी ++ 11 में टुपल्स का उपयोग करने के लिए अच्छे उपयोग-मामले क्या हैं? उदाहरण के लिए, मैं एक समारोह है कि एक स्थानीय struct को परिभाषित करता है इस प्रकार है:सी ++ 11 में टुपल्स के लिए अच्छे उपयोग-मामले क्या हैं?
template<typename T, typename CmpF, typename LessF>
void mwquicksort(T *pT, int nitem, const int M, CmpF cmp, LessF less)
{
struct SI
{
int l, r, w;
SI() {}
SI(int _l, int _r, int _w) : l(_l), r(_r), w(_w) {}
} stack[40];
// etc
मैं एक std::tuple<int,int,int>
है, जो सुविधाजनक निर्माणकर्ता और ऑपरेटरों को पहले से ही पूर्वनिर्धारित के साथ एक दूर छोटे घोषणा है साथ SI
struct को बदलने के लिए विचार कर रहा था, लेकिन साथ निम्नलिखित नुकसान:
- ट्यूपल तत्व अस्पष्ट, कार्यान्वयन-परिभाषित structs में छिपे हुए हैं। भले ही विजुअल स्टूडियो उनकी सामग्री को अच्छी तरह से व्याख्या करता है और दिखाता है, फिर भी मैं सशर्त ब्रेकपॉइंट्स नहीं डाल सकता जो ट्यूपल तत्वों के मूल्य पर निर्भर करता है।
- व्यक्तिगत ट्यूपल फ़ील्ड (
get<0>(some_tuple)
) तक पहुंचने से संरचना तत्वों (s.l
) तक पहुंचने से कहीं अधिक वर्बोज़ है। - नाम से फ़ील्ड तक पहुंचने से संख्यात्मक सूचकांक की तुलना में कहीं अधिक जानकारीपूर्ण (और छोटा!) है।
पिछले दो बिंदुओं को कुछ हद तक tie
फ़ंक्शन द्वारा संबोधित किया गया है। इन नुकसानों को देखते हुए, ट्यूपल्स के लिए एक अच्छा उपयोग-मामला क्या होगा?
अद्यतन बाहर कर देता है कि VS2010 SP1 डीबगर निम्नलिखित सरणी std::tuple<int, int, int> stack[40]
की सामग्री को नहीं दिखा सकते हैं, लेकिन यह ठीक काम करता है जब यह एक struct के साथ कोडित है। तो निर्णय मूल रूप से एक ब्रेनर है: यदि आपको कभी भी अपने मूल्यों का निरीक्षण करना होगा, तो एक स्ट्रक्चर का उपयोग करें [esp। जीडीबी जैसे डीबगर्स के साथ महत्वपूर्ण]।
इंडेक्सिंग समस्या को उचित परिभाषित कॉन्स/एनम्स के साथ हल किया जा सकता है। – KillianDS
आपने एक प्रकार का फ़ंक्शन लिखा है जो 'टी *, आकार' लेता है? लोलवॉट, आप कभी ऐसा क्यों करेंगे? – Puppy
@DeadMG बस इतना है कि मैं आपको ट्रॉलिंग के लिए कुछ सामग्री दे सकता हूं। – zvrba