एक साधारण उदाहरण बताता है कि std::bind
का उपयोग कैसे किया जा सकता है:कैसे std :: बाइंड का उपयोग किया जा सकता है?
मान लें कि हमारे पास 3 तर्कों का कार्य है: f3 (x, y, z)। हम 2 तर्कों का एक कार्य करना चाहते हैं जिन्हें परिभाषित किया गया है: f2(x,y) = f3(x,5,y)
। C++ में हम इसे std::bind
के साथ आसानी से कर सकते हैं:
auto f2 = std::bind(f3, _1, 5, _2);
यह उदाहरण मेरे लिए स्पष्ट है: std::bind
अपनी पहली तर्क के रूप में एक समारोह लेता है और फिर इसे लेता है n अन्य तर्कों, जहां n समारोह के तर्क की संख्या है जिसे std::bind
के लिए पहला तर्क माना जाता है।
void foo(int &x)
{
++x;
}
int main()
{
int i = 0;
// Binds a copy of i
std::bind(foo, i)(); // <------ This is the line that I do not understand.
std::cout << i << std::endl;
}
यह स्पष्ट है foo
एक तर्क है कि और std::bind
साथ यह i
करने के लिए सेट किया गया था:
हालांकि, मैं बाँध का एक और उपयोग मिल गया। लेकिन हम (foo, i)
के बाद ब्रैकेट की एक और जोड़ी का उपयोग क्यों करते हैं? और हम std::bind
के आउटपुट का उपयोग क्यों नहीं करते? मेरा मतलब है, हमारे पास auto f = std::bind(foo, i)
क्यों नहीं है?
auto bar = std::bind(foo, i);
bar();
यह एक बाध्य functor बनाता है, तो तुरंत यह (कोष्ठक की दूसरी जोड़ी का उपयोग करके) कहता है:
पृथ्वी पर क्या है \\\ '? –
यह एक टिप्पणी होना चाहिए था: // – Roman