c++ Boost:: none_t कार्यान्वयन के लिए तर्क क्या है?



boost-optional (1)

Boost.Optional एक डमी प्रकार का उपयोग करता है ताकि boost::optional<T> Boost.Optional उदाहरणों का निर्माण boost::optional<T> । इस प्रकार को none_t कहा जाता है, और एक उदाहरण सुविधा के लिए हेडर में पहले से ही परिभाषित none किया गया है, जिससे हमें निम्न जैसे कोड लिखने की इजाजत मिलती है:

boost::optional<int> uninitialized(boost::none);

none_t की परिभाषा को none_t , मैंने देखा कि यह वास्तव में कुछ डमी संरचना में पॉइंटर-टू-सदस्य के अनुरूप एक none_t :

namespace boost {

namespace detail { struct none_helper{}; }

typedef int detail::none_helper::*none_t ;

none_t const none = (static_cast<none_t>(0)) ;

} // namespace boost

इस तरह की एक सरल खाली संरचना पर इस तरह के एक ठोस टाइपिफ़ का उपयोग करने के क्या फायदे हैं?

namespace boost {

struct none_t {};

none_t const none;

} // namespace boost

आह, मैंने कभी गहरी खुदाई नहीं सोचा था।

एक नियमित struct लिए एक (अधिक या कम स्पष्ट) लाभ यह है कि अब none बूलियन संदर्भों में false मूल्यांकन none करता है।

किसी अन्य "झूठ का मूल्यांकन" पर एक लाभ यह है कि सदस्य के सूचक को हानिकारक पदोन्नति से अभिन्न प्रकारों से रोका जाता है।

तो, मुझे लगता है कि यह एक वस्तु रखने का एक सुरक्षित और संक्षिप्त तरीका प्रदान करता है जो false मूल्यांकन करता false

संपादित करें: किसी को सुरक्षित बूल मुहावरे की संरचना (hum ...) को पहचानना चाहिए।





boost-optional