2012-12-26 16 views
6

मैं निम्नलिखित कोड को समझने की कोशिश कर रहा हूं। व्युत्पन्न टी से एक व्युत्पन्न संरचना और क्या करता है "," इसका मतलब है और उसके बाद निवर्तन {}सी ++ टेम्पलेट्स और व्युत्पन्न कक्षाएं

template <class T> 
struct has_FlowTraits<T, true> 
{ 
    struct Fallback { bool flow; }; 
    struct Derived : T, Fallback { }; //What does it means ? 

    template<typename C> 
    static char (&f(SameType<bool Fallback::*, &C::flow>*))[1]; 

    template<typename C> 
    static char (&f(...))[2]; 

public: 
    static bool const value = sizeof(f<Derived>(0)) == 2; 
}; 
+0

'व्युत्पन्न 'एक' संरचना 'है जिसमें दो आधार वर्ग हैं:' टी' और' फ़ॉलबैक '। – Mankarse

उत्तर

6

यह Member Detector Idiom के एक कार्यान्वयन है। यह का उपयोग यह जांचने के लिए करता है कि टाइप टी को flow नामक सदस्य मिला है या नहीं।

संपादित करें: आप जिस कॉमा भाग के बारे में पूछ रहे हैं वह multiple inheritance है। व्युत्पन्न संरचना (सार्वजनिक रूप से) से टी और फ़ॉलबैक से विरासत में है।

+0

-1: वास्तव में ओपी प्रश्न का उत्तर नहीं देता है, उसके पास ** वाक्यविन्यास गलतफहमी ** है, और इसे समझाया जाने वाला है। –

+0

मुझे एहसास हुआ और संपादित किया गया। – jrok

+0

ओकी :-) मैं अपना डाउनवोट –

2

यह सिर्फ एकाधिक विरासत है। निम्नलिखित एक DerivedT से प्राप्त होता है वह यह है कि (और आगे नहीं परिभाषा प्रदान करता है):

struct Derived : T { }; 

और निम्नलिखित एक DerivedT और Fallback दोनों से प्राप्त होता है वह यह है कि:

struct Derived : T, Fallback { }; 

है यही कारण है कि, DerivedFallback के सदस्यों Tऔर के सदस्यों का उत्तराधिकारी होगा। इस मामले में, Derived एक संरचना है, इसलिए विरासत डिफ़ॉल्ट रूप से सार्वजनिक उत्तराधिकारी है।

1

अल्पविराम का अर्थ है कि यह सार्वजनिक रूप से या निजी रूप से प्राप्त होता है (इस पर निर्भर करता है कि T या Fallback उन दो वर्गों से एक संरचना या कक्षा है)। कॉमा में बस उन वर्गों को शामिल किया गया है, जिनमें से Derive प्राप्त होगा।

+0

धन्यवाद। – user1768610

1

इसका मतलब है:

has_FlowTraits struct की परिभाषा के अंदर, आप भी एक नया struct जो Derived कहा जाता है परिभाषित करते हैं।

आप कहते हैं कि यह संरचना Derived प्रकार टी, और प्रकार Fallback टाइप कर रहा है। (यदि आप पहले लाइन को देखते हैं, तो struct Fallback अभी परिभाषित किया गया है)।

{} का मतलब है कि कार्यान्वयन का कोई और विवरण नहीं है। इस प्रकार के उपयोगी होने के लिए कोई और विधि या विशेषता परिभाषा की आवश्यकता नहीं है।

+0

स्पष्टीकरण के लिए धन्यवाद। – user1768610

+0

:-) SO पर आपका स्वागत है! –

+0

स्टीफन, जब मैं Aix xlc 12.1 का उपयोग करके संकलित करने का प्रयास करता हूं, तो मुझे निम्न त्रुटि मिलती है। "YAMLTraits.h", लाइन 264।20: 1540-0118 (एस) बेस विनिर्देशक में एक वर्ग का नाम अपेक्षित है। लाइन 264 "संरचना व्युत्पन्न है: टी, फ़ॉलबैक {};"। कोई विचार क्या कारण हो सकता है? – user1768610

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