संपादित करें: मैं टीडीएम-जीसीसी-4.7.1-2 उपयोग कर रहा हूँ विंडोजtemplated अड्डों से एकाधिक विरासत टाइपिफ को कैसे असंबद्ध करने के लिए?
यह कैसे हल करने के लिए सुनिश्चित नहीं हैं। मैं इसे एक प्रकार की सूची सूची के रूप में उपयोग करना चाहता हूं जो मुझे बताएगा कि मैं B
के टाइपपीफ में मौजूद किसी प्रकार का उपयोग करने का प्रयास नहीं कर रहा हूं।
template <typename T, typename U>
struct A {
typedef pair<T, U> type;
};
struct B : A<int, string>, A<int, float> {};
B::type foo; // won't compile, ambiguous reference, as expected
B::A<int, int>::type bar; // compiles fine?? :(
वहाँ एक रास्ता यह A<int, int>
पर विफल प्राप्त करने के लिए (और किसी भी अन्य A
के B
द्वारा विरासत में मिला नहीं), या किसी अन्य तरीके से इस बारे में जाने के लिए है? मुझे लगता है कि मैं tuple
का उपयोग कर सकता हूं और is_same
प्रत्येक तत्व पर तुलना करके जो भी मैं मेटाफंक्शन को खिलाता हूं, लेकिन यह आसान लग रहा था ... पहले: \
मुझे शक है कि 'बी :: एक :: type' बिल्कुल संकलन चाहिए ...'बी :: ए' पहले से ही संदिग्ध है और टेम्पलेट का संदर्भ नहीं देता है, लेकिन उन क्षणों में से एक जिन्हें 'बी' प्राप्त होता है ... –
@ डेविडरोड्रिगुएज़-ड्राईबीस मैं सहमत हूं, मुझे नहीं लगता कि यह क्यों संकलित करता है। मैं शायद मानक में दफन एक नियम लापता हूं। –
मेरा मानना है कि अनुभाग सी ++ 11 ड्राफ्ट में 14.6.1-4 है। स्पष्ट रूप से इस मामले की अनुमति देता है – jmetcalfe