2012-11-15 19 views
11

मुझे इस तथ्य से अवगत है कि 'आश्रित नाम' डिफ़ॉल्ट रूप से संकलक को दिखाई नहीं दे रहे हैं। लेकिन मुझे अन्य SO प्रश्नों के उत्तर में बताया गया था (here, here, और अंततः on the C++ faq) कि using घोषणा सहायता कर सकती है।टेम्पलेट बेस क्लास टाइपपीफ सदस्य अदृश्य

तो मैंने कोशिश की।

एक टेम्पलेट आधार वर्ग:

// regardless of the fact that members are exposed... 
template<typename T> 
struct TBase { 
    typedef T MemberType; 
    MemberType baseMember; 
    MemberType baseFunction() { return MemberType(); } 
}; 

और एक व्युत्पन्न वर्ग, आधार के सदस्यों का उपयोग कर:

template<typename T> 
struct TDerived : public TBase<T> { 
    // http://www.parashift.com/c++-faq-lite/nondependent-name-lookup-members.html 
    // tells us to use a `using` declaration. 
    using typename TBase<T>::MemberType; 
    using TBase<T>::baseFunction; 
    using TBase<T>::baseMember; 

    void useBaseFunction() { 
     // this goes allright. 
     baseFunction(); 
     ++baseMember; 

     // but here, the compiler doesn't want to help... 
     MemberType t; //error: expected `;' before ‘t’ 
    } 
}; 

मैं this out on ideone की कोशिश की। इसमें जीसीसी-4.3.3 और जीसीसी-4.5.1

क्या यह अपेक्षित व्यवहार है? माता-पिता टेम्पलेट वर्ग 'सदस्य टाइपपीफ तक पहुंचने के लिए हमें' आश्रित नाम 'कानून के आसपास कैसे काम करना चाहिए?

using MemberType = typename TBase<T>::MemberType; // new type alias syntax 

या

typedef typename TBase<T>::MemberType MemberType; // old type alias syntax 

वाक्य रचना using Base::member; केवल गुंजाइश में गैर प्रकार के सदस्यों की घोषणाओं लाने के लिए इस्तेमाल किया जा सकता:

उत्तर

18

आप शायद करना चाहते हैं।


भी ध्यान रखें कि इनमें से कोई भी वास्तव में आवश्यक हैं, तो आप प्रत्येक उपयोग (प्रकार के लिए आधार के साथ या तो this-> या आधार के साथ गैर-प्रकारों के लिए,) प्राप्त करने के साथ कि प्रतीक निर्भर कर देगा।

+0

इस मुद्दे से फंस गया था। आपके उत्तर में आया और व्युत्पन्न वर्ग में "यह->" का उपयोग करके एक आकर्षण की तरह काम किया। धन्यवाद। –

+0

असल में, आप सिंटैक्स का उपयोग कर उपयोग कर सकते हैं लेकिन टाइपनाम नाम की आवश्यकता टाइपिनम टीबीज़ :: सदस्य टाइप; 'मेरे लिए काम करना प्रतीत होता है – RiaD

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