সি ++ এর পদ্ধতিতে কীভাবে optionচ্ছিক আর্গুমেন্টগুলি পাস করবেন? কোনও কোড স্নিপেট ...
সি ++ এর পদ্ধতিতে কীভাবে optionচ্ছিক আর্গুমেন্টগুলি পাস করবেন? কোনও কোড স্নিপেট ...
উত্তর:
Modeচ্ছিক প্যারামিটার হিসাবে মোড পাস করার উদাহরণ এখানে
void myfunc(int blah, int mode = 0)
{
if (mode == 0)
do_something();
else
do_something_else();
}
আপনি উভয় উপায়ে myfunc কল করতে পারেন এবং উভয়ই বৈধ
myfunc(10); // Mode will be set to default 0
myfunc(10, 1); // Mode will be set to 1
NULL
এটি শাব্দিক হিসাবে সংজ্ঞায়িত করা হলেও একটি নাল পয়েন্টার অর্থ 0
। ধ্রুব শূন্যের জন্য এটি সর্বজনীন নাম নয়। পূর্ণসংখ্যার (অ-পয়েন্টার) জন্য আপনি সংখ্যা ব্যবহার করা উচিত: int mode = 0
।
ডিফল্ট প্যারামিটার ব্যবহার সম্পর্কিত একটি গুরুত্বপূর্ণ নিয়ম:
ডিফল্ট প্যারামিটারগুলি বেশিরভাগ প্রান্তে নির্দিষ্ট করা উচিত, একবার আপনি যখন কোনও ডিফল্ট মান প্যারামিটার নির্দিষ্ট করেন আপনি আবার অ ডিফল্ট প্যারামিটার নির্দিষ্ট করতে পারবেন না। উদা:
int DoSomething(int x, int y = 10, int z) -----------> Not Allowed
int DoSomething(int x, int z, int y = 10) -----------> Allowed
int foo(int x, int y = 10, int z = 10)
ফোন করতে এবং ফোন করতে চাই তবে কী হবে foo(1,2)
, তাই কেবলমাত্র একটি optionচ্ছিক পরামিতি দেওয়া। আমি নিজে এটি কাজ করতে সক্ষম হবে বলে মনে হয় নি।
আপনার কারও কাছে এটি আকর্ষণীয় হতে পারে যে একাধিক ডিফল্ট পরামিতিগুলির ক্ষেত্রে:
void printValues(int x=10, int y=20, int z=30)
{
std::cout << "Values: " << x << " " << y << " " << z << '\n';
}
নিম্নলিখিত ফাংশন কল দেওয়া:
printValues(1, 2, 3);
printValues(1, 2);
printValues(1);
printValues();
নিম্নলিখিত আউটপুট উত্পাদিত হয়:
Values: 1 2 3
Values: 1 2 30
Values: 1 20 30
Values: 10 20 30
তথ্যসূত্র: http://www.learncpp.com/cpp-tutorial/77-default-paraters/
ডিফল্ট পরামিতি ব্যবহার করুন
template <typename T>
void func(T a, T b = T()) {
std::cout << a << b;
}
int main()
{
func(1,4); // a = 1, b = 4
func(1); // a = 1, b = 0
std::string x = "Hello";
std::string y = "World";
func(x,y); // a = "Hello", b ="World"
func(x); // a = "Hello", b = ""
}
দ্রষ্টব্য: নীচেরগুলি অ-গঠিত
template <typename T>
void func(T a = T(), T b )
template <typename T>
void func(T a, T b = a )
এখানে বর্ণিত উদাহরণটি অনুসরণ করতে, তবে শিরোনাম ফাইলগুলির ব্যবহারের সাথে বাক্য গঠনটি পরিষ্কার করতে, ফাংশন ফরোয়ার্ড ঘোষণায় alচ্ছিক প্যারামিটারের ডিফল্ট মান থাকে।
myfile.h
void myfunc(int blah, int mode = 0);
myfile.cpp
void myfunc(int blah, int mode) /* mode = 0 */
{
if (mode == 0)
do_something();
else
do_something_else();
}
কমাগুলি তাদের পৃথক করার সাথে সাথে ডিফল্ট মান ব্যতীত প্যারামিটারগুলির মতো।
int func( int x = 0, int y = 0 );
func(); // doesn't pass optional parameters, defaults are used, x = 0 and y = 0
func(1, 2); // provides optional parameters, x = 1 and y = 2
সি ++ 17 এ স্ট্যান্ড :: :: alচ্ছিক প্রবর্তনের সাথে সাথে আপনি alচ্ছিক আর্গুমেন্টগুলি পাস করতে পারবেন:
#include <iostream>
#include <string>
#include <optional>
void myfunc(const std::string& id, const std::optional<std::string>& param = std::nullopt)
{
std::cout << "id=" << id << ", param=";
if (param)
std::cout << *param << std::endl;
else
std::cout << "<parameter not set>" << std::endl;
}
int main()
{
myfunc("first");
myfunc("second" , "something");
}
আউটপুট:
id=first param=<parameter not set>
id=second param=something