Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में बाइंड फंक्शन और प्लेसहोल्डर्स

यहां हम C++ में बाइंड फंक्शन और प्लेसहोल्डर्स देखेंगे। कभी-कभी हमें कुछ फंक्शन्स के ऑपरेशन को अपनी आवश्यकता के अनुसार मैनिपुलेट करने की आवश्यकता होती है। हम कुछ डिफॉल्ट पैरामीटर्स का उपयोग करके मैनिपुलेशन का कुछ सार प्राप्त कर सकते हैं।

C++11 में, एक नई सुविधा पेश की गई है, जिसे बाइंड फंक्शन कहा जाता है। यह हमें इस तरह के मैनिपुलेशन को कुछ आसान तरीके से करने में मदद करता है। इन सुविधाओं का उपयोग करने के लिए, हमें <functional> हेडर फाइल का उपयोग करना होगा।

प्लेसहोल्डर्स की मदद से बाइंड फंक्शन पोजीशन और आर्गुमेंट्स की संख्या निर्धारित करने में मदद करता है ताकि फंक्शन को वांछित आउटपुट के अनुसार संशोधित किया जा सके।

प्लेसहोल्डर्स नेमस्पेस हैं जो फंक्शन में वैल्यू की स्थिति का पता लगाते हैं। प्लेसहोल्डर्स को _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);
    return 0;
}

आउटपुट

-9
42
31337
314160
num_: 314159
314161
314162
18
  1. - C++ में वर्चुअल फंक्शन और प्योर वर्चुअल फंक्शन के बीच अंतर

    निम्नलिखित तालिका वर्चुअल और प्योर वर्चुअल फंक्शन के बीच अंतर दिखाती है:वर्चुअल फंक्शनप्योर वर्चुअल फंक्शनवर्चुअल फंक्शन की क्लास में उनकी परिभाषा होती है।प्योर वर्चुअल फंक्शन की कोई परिभाषा नहीं होती।डिक्लेरेशन: virtual funct_name(parameter_list) {. . . . .};डिक्लेरेशन: virtual funct_name(parameter

  1. - C++ में फ्रेंड क्लास और फ़ंक्शन

    किसी क्लास का फ्रेंड फ़ंक्शन उस क्लास के स्कोप के बाहर परिभाषित होता है लेकिन उसे उस क्लास के सभी प्राइवेट और प्रोटेक्टेड मेंबर्स को एक्सेस करने का अधिकार होता है। भले ही फ्रेंड फ़ंक्शन के प्रोटोटाइप क्लास परिभाषा में दिखाई देते हैं, फ्रेंड मेंबर फ़ंक्शन नहीं होते। एक फ्रेंड एक फ़ंक्शन, फ़ंक्शन टेम

  1. - C++ में endl और \n की तुलना

    \n एक न्यूलाइन आउटपुट करता है (उपयुक्त प्लेटफॉर्म-विशिष्ट प्रतिनिधित्व में, इसलिए यह विंडोज पर \r\n उत्पन्न करता है), लेकिन std::endl वही करता है और स्ट्रीम को फ्लश करता है। आमतौर पर, आपको तुरंत स्ट्रीम को फ्लश करने की आवश्यकता नहीं होती और यह केवल प्रदर्शन की कीमत चुकाएगा, इसलिए अधिकांश भाग के लिए