সর্বাধিক উদাহরণ ফুটাইয়া কমান callbacks : আপনি একটি ফাংশন কল f()
অন্য ফাংশনের ঠিকানা ক্ষণস্থায়ী g()
, এবং f()
কল g()
কিছু নির্দিষ্ট কাজের জন্য। আপনি যদি f()
এর h()
পরিবর্তে ঠিকানাটি পাস করেন , তবে পরিবর্তে f()
আবার কল করবেন h()
।
মূলত, এটি একটি ফাংশনকে প্যারামিট্রাইজ করার একটি উপায় : এর আচরণের কিছু অংশ হার্ড-কোডড হয় না f()
, তবে কলব্যাক ফাংশনে থাকে। কলকারীরা f()
বিভিন্ন কলব্যাক ফাংশন পেরিয়ে আলাদা আচরণ করতে পারে । একটি ক্লাসিক qsort()
সি স্ট্যান্ডার্ড লাইব্রেরি থেকে যা তার বাছাই করা মানদণ্ডকে তুলনা ফাংশনে নির্দেশক হিসাবে গ্রহণ করে।
সি ++-তে, এটি প্রায়শই ফাংশন অবজেক্টগুলি (ফান্টেক্টরও বলা হয়) ব্যবহার করে করা হয়। এটি এমন বস্তু যা ফাংশন কল অপারেটরটিকে ওভারলোড করে, তাই আপনি তাদের কল করতে পারেন যেন তারা কোনও ফাংশন। উদাহরণ:
class functor {
public:
void operator()(int i) {std::cout << "the answer is: " << i << '\n';}
};
functor f;
f(42);
এর পিছনে ধারণাটি হ'ল, কোনও ফাংশন পয়েন্টারের বিপরীতে, একটি ফাংশন অবজেক্ট কেবল একটি অ্যালগোরিদমই নয়, ডেটাও বহন করতে পারে:
class functor {
public:
functor(const std::string& prompt) : prompt_(prompt) {}
void operator()(int i) {std::cout << prompt_ << i << '\n';}
private:
std::string prompt_;
};
functor f("the answer is: ");
f(42);
আরেকটি সুবিধা হ'ল ফাংশন পয়েন্টারগুলির মাধ্যমে কলগুলির চেয়ে কখনও কখনও ফাংশন অবজেক্টগুলিতে কলগুলি ইনলাইন করা সহজ। এই কারণেই সি ++ এ বাছাই করা মাঝে মাঝে সি বাছাইয়ের চেয়ে দ্রুত হয় is