সবচেয়ে সহজ উদাহরণ যা আমি ভাবতে পারি:
std::optional<int> try_parse_int(std::string s)
{
//try to parse an int from the given string,
//and return "nothing" if you fail
}
পরিবর্তে (নিম্নলিখিত স্বাক্ষর হিসাবে) একটি রেফারেন্স যুক্তি দিয়ে একই জিনিস সম্পাদন করা যেতে পারে তবে std::optional
ব্যবহারটি স্বাক্ষর এবং ব্যবহারকে আরও সুন্দর করে তোলে।
bool try_parse_int(std::string s, int& i);
এটি করার আরেকটি উপায় বিশেষত খারাপ :
int* try_parse_int(std::string s); //return nullptr if fail
এর জন্য গতিশীল মেমরি বরাদ্দ প্রয়োজন, মালিকানা সম্পর্কে চিন্তা করা ইত্যাদি - উপরের অন্যান্য দুটি স্বাক্ষরের মধ্যে সর্বদা পছন্দ করুন।
আরেকটি উদাহরণ:
class Contact
{
std::optional<std::string> home_phone;
std::optional<std::string> work_phone;
std::optional<std::string> mobile_phone;
};
এটি std::unique_ptr<std::string>
প্রতিটি ফোন নম্বরগুলির মতো কিছু রাখার চেয়ে চূড়ান্ত ! std::optional
আপনাকে ডেটা লোকাল দেয় যা পারফরম্যান্সের জন্য দুর্দান্ত।
আরেকটি উদাহরণ:
template<typename Key, typename Value>
class Lookup
{
std::optional<Value> get(Key key);
};
যদি অনুসন্ধানের কোনও নির্দিষ্ট কী না থাকে তবে আমরা কেবল "কোনও মূল্য নেই" ফিরতে পারি।
আমি এটি এর মতো ব্যবহার করতে পারি:
Lookup<std::string, std::string> location_lookup;
std::string location = location_lookup.get("waldo").value_or("unknown");
আরেকটি উদাহরণ:
std::vector<std::pair<std::string, double>> search(
std::string query,
std::optional<int> max_count,
std::optional<double> min_match_score);
এটি বলার চেয়ে অনেক বেশি অর্থবোধ করে যে বলে, চারটি ফাংশন ওভারলোড যা প্রতিটি সম্ভাব্য সংমিশ্রণ গ্রহণ করে max_count
(বা না) এবং min_match_score
(বা না)!
এছাড়া ঘটিয়েছে অভিশপ্ত "পাস -1
জন্য max_count
আপনি একটি সীমা চাই না" বা "পাস std::numeric_limits<double>::min()
জন্য min_match_score
আপনি একটি সর্বনিম্ন স্কোর চাই না"!
আরেকটি উদাহরণ:
std::optional<int> find_in_string(std::string s, std::string query);
যদি ক্যোয়ারী স্ট্রিংটি না থাকে তবে s
আমি "না int
" চাই - কেউ এই উদ্দেশ্যে (-1?) ব্যবহার করার সিদ্ধান্ত নেয় এমন কোনও বিশেষ মান নয় ।
অতিরিক্ত উদাহরণগুলির জন্য, আপনি boost::optional
ডকুমেন্টেশনটি দেখতে পারেন । boost::optional
এবংstd::optional
আচরণ এবং ব্যবহারের ক্ষেত্রে মূলত অভিন্ন হবে।