क्या `समानता_संकल्पनीय_हथ` को` सामान्य_प्रदर्शन` की आवश्यकता है?


12

इस अवधारणाequality_­comparable_with<T, U> का उद्देश्य यह घोषित करना है कि प्रकार की वस्तुओं Tऔर Uएक दूसरे के बराबर तुलना की जा सकती है, और यदि वे हैं, तो इसका अपेक्षित अर्थ है। कोई बात नहीं।

हालाँकि, इस अवधारणा को भी common_reference_t<T&, U&>मौजूद होना चाहिए । के लिए प्राथमिक प्रोत्साहन common_referenceऔर उसके परिचर कार्यक्षमता के लिए हो रहा है प्रॉक्सी iterators सक्षम , के बीच के रिश्ते का प्रतिनिधित्व करने के लिए एक जगह है करने के लिए referenceऔर value_typeइस तरह के iterators के लिए।

यह बहुत अच्छा है, लेकिन ... अगर एक Tऔर Uएक दूसरे के बराबर की तुलना की जा सकती है तो परीक्षण के साथ क्या करना है ? मानक की आवश्यकता क्यों है Tऔर Uएक समान संदर्भ संबंध है जो आपको उनकी तुलना करने की अनुमति देता है?

यह विषम परिस्थितियों को बनाता है जहाँ दो प्रकारों का होना बहुत मुश्किल होता है जो कि एक सामान्य-संदर्भ संबंध नहीं है जो तार्किक रूप से तुलनीय है। उदाहरण के लिए, vector<int>और pmr::vector<int>तार्किक रूप से तुलनीय होना चाहिए। लेकिन वे नहीं हो सकते क्योंकि दोनों के बीच कोई उचित सामान्य संदर्भ नहीं है अन्यथा असंबंधित प्रकार।


@ मार्शल इस सवाल का अनुमोदन करेंगे।
बैरी

अच्छी तरह से भी assignable_fromआवश्यकता है common_reference...
cpplearner

@cpplearner: कि कम से कम कुछ समझ में आता है, क्योंकि असाइनमेंट एक संपत्ति है जिसे प्रॉक्सी संदर्भ और मूल्यों को साझा करने की उम्मीद है।
निकोल बोल्स

जवाबों:


4

यह पालो अल्टो रिपोर्ट , and3.3 और D.2 पर वापस चला जाता है ।

गणितीय रूप से क्रॉस-टाइप अवधारणाओं के लिए, आपको यह परिभाषित करने की आवश्यकता है कि क्रॉस-टाइप तुलना का क्या मतलब है। के लिए equality_comparable_with, t == uआम तौर पर इसका मतलब है कि tऔर uसमान हैं, लेकिन समान होने के लिए विभिन्न प्रकारों के दो मूल्य के लिए भी इसका क्या मतलब है? डिज़ाइन का कहना है कि क्रॉस-टाइप समानता को सामान्य (संदर्भ) प्रकार के लिए मैप करके परिभाषित किया गया है (मूल्य को संरक्षित करने के लिए यह रूपांतरण आवश्यक है)।

जहां मजबूत स्वयंसिद्ध equality_comparable_withवांछनीय नहीं है, मानक एक्सपोजर-केवल अवधारणा का उपयोग करता है weakly-equality-comparable-with, और उस अवधारणा को एक सामान्य संदर्भ की आवश्यकता नहीं है। हालांकि, यह एक "अर्थ संबंधी उन्मूलन" (केसी कार्टर के शब्दों में) है और केवल इस कारण से एक्सपोज़र है: यह होने की अनुमति देता है t == uऔर t2 == uलेकिन t != t2(यह वास्तव में प्रहरी के लिए आवश्यक है)।


2
यह दिलचस्प है, लेकिन यह स्पष्ट नहीं करता है कि "गणितीय रूप से ध्वनि" समाधान में इस "सामान्य संदर्भ" प्रकार के बजाय ... अच्छी तरह से, कुछ और क्यों शामिल है । यही कारण है कि, यह इस निहित संदर्भ रूपांतरण व्यवसाय को ऐसा करने के बजाय शामिल करता है जो तार्किक रूप से गणितीय ध्वनि अवधारणाओं के लिए अनुमति देता है जो रूपांतरणों की अनुमति नहीं दे सकता (जैसे तुलनीय है container<T, stuff>और container<U, other_stuff>यदि Tतुलनीय है U)? क्या यह सिर्फ वही है जो common_referenceउपलब्ध था, या क्या इससे कहीं अधिक है?
निकोल बोलस

यह इस विचार का अभाव है कि सामान्य_संचालन प्रकार में रूपांतरण कार्य एक समरूपता है।
ओलिव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.