2017-05-18 40 views
6

मेरे पास ऐसी स्थिति है जहां किसी फ़ंक्शन को किसी तालिका से लिया गया मान वापस करना होगा। इस तालिका में एक सेल (मान लें कि तालिका बस काम करती है ...) में कोई मान हो सकता है, या ऐसा नहीं हो सकता है। यह मान कई प्रकारों में से एक भी हो सकता है: int, double, string, date (लेकिन कोई अन्य प्रकार नहीं)।रिटर्न प्रकार std :: वैकल्पिक <std :: variant <...>>

ऐसा फ़ंक्शन वापस क्या होगा? क्या std::optional<std::variant<std::string, int, double, std::chrono::time_point>> वापस करना अच्छा विचार है?

क्या यह optional और variant का अच्छा उपयोग होगा?

+0

वैकल्पिक + संस्करण की तरह लगता है इस आवश्यकता को हल कर सकते हैं। – Kobi

उत्तर

11

मैं इसे std::monostate का उपयोगी उपयोग मानता हूं। विशेष रूप से, variant<std::monostate, int, double, std::string, std::chrono::time_point>monostate उन मामलों के लिए उपयोगी है जहां variant में कोई मान नहीं हो सकता है।

optional<variant> के बजाय वास्तविक प्रकार का उपयोग करने के बारे में अच्छी बात यह है कि विज़िट सामान्य रूप से उस पर काम करती है। आप एक मज़ेदार लिख सकते हैं जो monostate पैरामीटर ले सकता है, इस प्रकार आप "खाली" संस्करणों के लिए visit का उपयोग कर सकते हैं।

+1

"यूनिट प्रकार std :: संस्करण में एक अच्छी तरह से व्यवहार खाली विकल्प के रूप में उपयोग के लिए इरादा है। [...]।" के बारे में सही लगता है। http://en.cppreference.com/w/cpp/utility/variant/monostate – user2296177

संबंधित मुद्दे