এখানে আমরা C++-এ বাইন্ড (bind) ফাংশন এবং প্লেসহোল্ডার (placeholders) দেখব। কখনও কখনও আমাদের কিছু ফাংশনের অপারেশন আমাদের প্রয়োজন অনুযায়ী ম্যানিপুলেট করতে হয়। ডিফল্ট প্যারামিটার ব্যবহার করে কিছুটা ম্যানিপুলেশন করা যায়।
C++11-এ একটি নতুন ফিচার আনা হয়েছে, যেটি বাইন্ড (bind) ফাংশন। এটি আমাদেরকে সহজে solche ম্যানিপুলেশন করতে সাহায্য করে। এই ফিচারগুলো ব্যবহার করতে হলে
বাইন্ড ফাংশন প্লেসহোল্ডারদের সাহায্যে পজিশন এবং আর্গুমেন্ট সংখ্যা নির্ধারণ করে ফাংশনটিকে ডিজায়ার আউটপুট অনুযায়ী মডিফাই করতে সাহায্য করে।
প্লেসহোল্ডার হলো নেমস্পেস যা একটি ফাংশনে একটি ভ্যালুর পজিশন ডিটেক্ট করে। প্লেসহোল্ডার _1, _2, _3 ইত্যাদি দিয়ে রিপ্রেজেন্ট করা হয়।
উদাহরণ কোড
#include <functional>
#include <iostream>
struct Foo {
Foo(int num) : num_(num) {}
void print_add(int i) const { std::cout << num_ + i << '\n'; }
int num_;
};
void print_num(int i) {
std::cout << i << '\n';
}
struct PrintNum {
void operator()(int i) const {
std::cout << i << '\n';
}
};
int main() {
std::function<void(int)> f_display = print_num;
f_display(-9);
std::function<void()> f_display_42 = []() { print_num(42); };
f_display_42();
std::function<void()> f_display_31337 = std::bind(print_num, 31337);
f_display_31337();
std::function<void(const Foo&, int)> f_add_display = &Foo::print_add;
const Foo foo(314159);
f_add_display(foo, 1);
std::function<int(Foo const&)> f_num = &Foo::num_;
std::cout << "num_: " << f_num(foo) << '\n';
using std::placeholders::_1;
std::function<void(int)> f_add_display2 = std::bind(&Foo::print_add, foo, _1);
f_add_display2(2);
std::function<void(int)> f_add_display3 = std::bind(&Foo::print_add, &foo, _1);
f_add_display3(3);
std::function<void(int)> f_display_obj = PrintNum();
f_display_obj(18);
}
আউটপুট
-9 42 31337 314160 num_: 314159 314161 314162 18