सी ++ लाइब्रेरी - <कार्यात्मक>
परिचय
फ़ंक्शन ऑब्जेक्ट्स विशेष रूप से डिज़ाइन किए गए ऑब्जेक्ट हैं जो फ़ंक्शन के समान सिंटैक्स के साथ उपयोग किए जाते हैं। एसटीडी के उदाहरण :: फ़ंक्शन किसी भी कॉल करने योग्य लक्ष्य को स्टोर कर सकता है, कॉपी कर सकता है और आह्वान कर सकता है - फ़ंक्शन, लैम्ब्डा एक्सप्रेशन, बाइंड एक्सप्रेशन, या अन्य फ़ंक्शन ऑब्जेक्ट्स, साथ ही साथ मेंबर फ़ंक्शंस और डेटा सदस्यों को पॉइंटर्स।
घोषणा
निम्नलिखित std :: फ़ंक्शन के लिए घोषणा है।
template<class >
class function;
सी ++ 11
template< class R, class... Args >
class function<R(Args...)>
मापदंडों
R - result_type।
argument_type - टी अगर साइज़ोफ़ ... (आर्ग्स) == 1 और टी आर्ग्स में पहला और एकमात्र प्रकार है।
उदाहरण
नीचे उदाहरण में std :: function के लिए।
#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
सदस्य कार्य
अनु क्रमांक। | सदस्य कार्य | परिभाषा |
---|---|---|
1 | (निर्माता) | इसका उपयोग एक नया एसटीडी :: फंक्शन इंस्टेंस बनाने के लिए किया जाता है |
2 | (नाशक) | इसका उपयोग std :: function आवृत्ति को नष्ट करने के लिए किया जाता है |
3 | ऑपरेटर = | इसका उपयोग एक नया लक्ष्य निर्धारित करने के लिए किया जाता है |
4 | विनिमय | इसका उपयोग सामग्री को स्वैप करने के लिए किया जाता है |
5 | असाइन | इसका उपयोग एक नया लक्ष्य निर्धारित करने के लिए किया जाता है |
6 | ऑपरेटर बूल | इसका उपयोग यह जांचने के लिए किया जाता है कि वैध लक्ष्य निहित है या नहीं |
7 | ऑपरेटर() | इसका उपयोग लक्ष्य को आह्वान करने के लिए किया जाता है |
गैर-सदस्यीय कार्य
अनु क्रमांक। | गैर-सदस्यीय कार्य | परिभाषा |
---|---|---|
1 | std :: स्वैप | यह std :: swap algorithm को माहिर करता है |
2 | ऑपरेटर == ऑपरेटर! = | यह ndptr के साथ एक std :: function की तुलना करता है |
संचालक वर्ग
अनु क्रमांक। | संचालक वर्ग | परिभाषा |
---|---|---|
1 | bit_and | यह एक बिट वाइज और फंक्शन ऑब्जेक्ट क्लास है |
2 | bit_or | यह एक बिट वाइज या फंक्शन ऑब्जेक्ट क्लास है |
3 | bit_xor | यह एक बिटवाइज़ XOR फंक्शन ऑब्जेक्ट क्लास है |
3 | विभाजित | यह एक डिवीजन फंक्शन ऑब्जेक्ट क्लास है |
4 | के बराबर | यह समानता की तुलना के लिए एक फ़ंक्शन ऑब्जेक्ट क्लास है |
5 | ग्रेटर | यह अधिक से अधिक असमानता तुलना के लिए एक फ़ंक्शन ऑब्जेक्ट क्लास है |
6 | greater_equal | यह तुलना से अधिक-या-समान-के लिए एक फ़ंक्शन ऑब्जेक्ट क्लास है |
7 | कम से | यह कम-से-असमानता की तुलना के लिए एक फ़ंक्शन ऑब्जेक्ट क्लास है |
8 | less_equal | यह तुलना से कम-या-बराबर-बराबर के लिए एक फ़ंक्शन ऑब्जेक्ट क्लास है |
9 | logical_and | यह एक तार्किक और फ़ंक्शन ऑब्जेक्ट क्लास है |
10 | logical_not | यह एक तार्किक नहीं फ़ंक्शन ऑब्जेक्ट क्लास है |
1 1 | logical_or | यह एक तार्किक या फ़ंक्शन ऑब्जेक्ट क्लास है |
12 | ऋण | यह एक घटाव फ़ंक्शन ऑब्जेक्ट क्लास है |
13 | मापांक | यह एक मॉड्यूलस फ़ंक्शन ऑब्जेक्ट क्लास है |
14 | पलता | यह एक गुणन फ़ंक्शन ऑब्जेक्ट क्लास है |
15 | निगेट | यह एक नकारात्मक कार्य वस्तु वर्ग है |
16 | बराबर नही है | यह गैर-समानता तुलना के लिए एक फ़ंक्शन ऑब्जेक्ट क्लास है |
17 | प्लस | यह एक अतिरिक्त फ़ंक्शन ऑब्जेक्ट क्लास है |