में तीन रचनाकारों के बारे में प्रश्न http://en.cppreference.com/w/cpp/utility/variant/variant से std::variant
के लिए कन्स्ट्रक्टर (4) क्यों मौजूद है? ऐसा लगता है कि यह कोड में बहुत अस्पष्टता का कारण बन रहा है जो अन्यथा स्पष्ट होने से बचा जा सकता है .. उदाहरण के लिए cppreference पर कोड नमूना संभावित अस्पष्टता को हाइलाइट करता है जो उपयोगकर्ता नोटिस नहीं कर सकते हैं (तीसरी पंक्ति)std :: variant के प्रस्तावित इंटरफ़ेस
variant<string> v("abc"); // OK
variant<string, string> w("abc"); // ill-formed, can't select the alternative to convert to
variant<string, bool> w("abc"); // OK, but chooses bool
क्या ऐसा कोई मामला है जहां इसकी पूरी आवश्यकता हो रही है?
दूसरा प्रश्न यह था कि क्यों एक ही cppreference पृष्ठ से रचनाकार (6) और (8) की आवश्यकता होती है। नहीं (5) और (7) उन प्रयोजनों को पूरा करेंगे जो (6) और (8) के लिए हैं? मैं उनके उपयोग गलतफहमी हो सकता है ..
पाठक के लिए निर्माताओं है कि मैं अपने सवाल में कहा जाता है
constexpr variant(); // (1) (since C++17)
variant(const variant& other); // (2) (since C++17)
variant(variant&& other); // (3) (since C++17)
template< class T > // (4) (since C++17)
constexpr variant(T&& t);
template< class T, class... Args >
constexpr explicit variant(std::in_place_type_t<T>, Args&&... args); // (5) (since C++17)
template< class T, class U, class... Args >
constexpr explicit variant(std::in_place_type_t<T>,
std::initializer_list<U> il, Args&&... args); // (6) (since C++17)
template< std::size_t I, class... Args >
constexpr explicit variant(std::in_place_index_t<I>, Args&&... args) // (7) (since C++17)
template <size_t I, class U, class... Args>
constexpr explicit variant(std::in_place_index_t<I>,
std::initializer_list<U> il, Args&&... args); // (8) (since C++17)
ठीक है, क्या आप वास्तव में 'in_place' कन्स्ट्रक्टर * का उपयोग करना चाहते हैं * हर बार जब आप बाध्य प्रकारों में से एक के साथ एक संस्करण शुरू करते हैं? –
Brian
प्रारंभकर्ता_सूची रचनाकारों के लिए, मुझे पूरा यकीन है कि यदि आप कभी भी एक प्रारंभिकज़र_सूची ऑब्जेक्ट बनाने के बजाय सीधे ब्रेसिड-इनिट-सूची पास करना चाहते हैं, तो उसे आवश्यक है। – Brian
@Brian व्यक्तिगत रूप से, ऐसा लगता है यह इंटरफ़ेस मुझे लगता है कि एक संस्करण बनाने के बारे में जाने का सबसे अच्छा तरीका है। क्योंकि (4) कई बार संदिग्ध हो सकता है ... – Curious