एक लैम्ब्डा के लिए एक तत्व पासिंग एक एल्गोरिथ्म के अंदर, मैं एक लैम्ब्डा कि संदर्भ-टू-स्थिरांक द्वारा एक तत्व को स्वीकार करता है बनाना चाहते हैं, :द्वारा संदर्भ-टू-स्थिरांक
Error: »const«-qualifier cannot be applied to »int&« (translated manually from German)
तब मुझे एहसास हुआ कि decltype(*it)
पहले से ही एक संदर्भ है, और निश्चित रूप से उन const
नहीं बनाया जा सकता। अगर मैं const
को हटाता हूं, तो कोड संकलित करता है, लेकिन मैं असफल होने के लिए x = x
चाहता हूं।
हमें एक मिनट के लिए प्रोग्रामर (जो मुझे है) पर भरोसा करें और const
से छुटकारा पाएं और स्पष्ट &
, जिसे संदर्भ ढहने वाले नियमों के कारण छोड़ दिया गया है, वैसे भी। लेकिन प्रतीक्षा करें, decltype(*it)
वास्तव में एक संदर्भ होने के लिए की गारंटी है, या मुझे सुरक्षित पक्ष में रहने के लिए स्पष्ट &
जोड़ना चाहिए?
हम प्रोग्रामर पर भरोसा नहीं करते हैं, तो मैं दो समाधान समस्या को हल करने में सोच सकते हैं:
(const typename std::remove_reference<decltype(*it)>::type& x)
(const typename std::iterator_traits<Iterator>::value_type& x)
आप खुद के लिए तय कर सकते हैं जो एक भद्दा है। आदर्श रूप में, मैं एक ऐसा समाधान चाहता हूं जिसमें कोई टेम्पलेट मेटा-प्रोग्रामिंग शामिल न हो, क्योंकि मेरे लक्षित दर्शकों ने पहले कभी नहीं सुना है। तो:
प्रश्न 1: decltype(*it)&
हमेशा decltype(*it)
जैसा ही है?
प्रश्न 2: मैं टेम्पलेट मेटा-प्रोग्रामिंग के बिना संदर्भ-टू-कॉन्स्ट द्वारा तत्व कैसे पास कर सकता हूं?
एक अंग्रेजी त्रुटि अच्छा होगा! :) – Pubby
@ पब्बी मैंने अपनी पूरी कोशिश की, सही करने के लिए स्वतंत्र महसूस करें :) – fredoverflow
@sehe सवाल शीर्ष-स्तरीय आधार के बारे में नहीं है। –