functional
Melléknév
functional
functional Könyvtár C++-ban 🚀
A functional könyvtár a C++ Standard Library része, amely függvényobjektumokat, lambda kifejezéseket, és különböző függvénykezelő eszközöket biztosít. Segítségével magasabb szintű funkcionális programozási paradigmákat valósíthatunk meg C++-ban.
1. A functional Könyvtár Főbb Elemei
| Elem | Leírás |
|---|---|
std::function |
Általános függvényobjektum |
std::bind |
Függvények és argumentumaik előre kötése |
std::mem_fn |
Osztálymetódusok meghívása objektumok nélkül |
std::ref / std::cref |
Referenciák továbbítása függvényeknek |
std::invoke |
Függvények meghívása egységes szintaxissal |
A functional könyvtár az #include <functional> direktívával érhető el.
2. std::function – Függvényobjektumok
A std::function egy általános függvénytároló, amely bármilyen kompatibilis függvényre, lambda kifejezésre vagy függvényobjektumra mutathat.
Egyszerű Példa
#include <iostream>
#include <functional>
void hello() {
std::cout << "Hello, világ!" << std::endl;
}
int main() {
std::function<void()> f = hello; // Függvény hozzárendelése
f(); // Meghívás
return 0;
}
Kimenet:
Hello, világ!
Paraméteres std::function
#include <iostream>
#include <functional>
int osszeg(int a, int b) {
return a + b;
}
int main() {
std::function<int(int, int)> f = osszeg;
std::cout << "Összeg: " << f(10, 20) << std::endl;
return 0;
}
Kimenet:
Összeg: 30
Lambda függvény tárolása
std::function<int(int)> negyzet = [](int x) { return x * x; };
std::cout << negyzet(5); // 25
3. std::bind – Függvények Argumentumainak Előrekötése
A std::bind lehetővé teszi egy függvény argumentumainak részleges rögzítését.
Egyszerű példa
#include <iostream>
#include <functional>
int osszeg(int a, int b) {
return a + b;
}
int main() {
auto f = std::bind(osszeg, 10, std::placeholders::_1); // Az első paraméter 10 lesz
std::cout << f(5) << std::endl; // 10 + 5
return 0;
}
Kimenet:
15
- A
std::placeholders::_1azt jelenti, hogy az első argumentumot megtartjuk változóként.
Osztálymetódusok használata std::bind-dal
#include <iostream>
#include <functional>
struct Szemely {
void udvozles(const std::string& nev) {
std::cout << "Szia, " << nev << "!" << std::endl;
}
};
int main() {
Szemely sz;
auto f = std::bind(&Szemely::udvozles, &sz, "Anna");
f(); // Szia, Anna!
return 0;
}
4. std::mem_fn – Metódusok Meghívása Objektumok Nélkül
A std::mem_fn egy tagfüggvényt hív meg egy adott objektumon.
#include <iostream>
#include <functional>
struct Ember {
void koszones() const {
std::cout << "Hello!" << std::endl;
}
};
int main() {
Ember e;
auto f = std::mem_fn(&Ember::koszones);
f(e); // Meghívja e.koszones() metódust
return 0;
}
Kimenet:
Hello!
5. std::ref és std::cref – Referenciák Továbbítása
A std::ref és std::cref biztosítja, hogy referenciaként adjuk át egy változót egy függvénynek.
Példa: Referencia használata
#include <iostream>
#include <functional>
void noveles(int& x) {
x += 10;
}
int main() {
int a = 5;
std::function<void()> f = std::bind(noveles, std::ref(a)); // Referenciával kötjük meg
f();
std::cout << "Új érték: " << a << std::endl;
return 0;
}
Kimenet:
Új érték: 15
- Ha
std::refnélkül használnánk, anoveles()nem módosítaná azaváltozót.
6. std::invoke – Egységes Függvényhívás
A std::invoke lehetővé teszi tetszőleges függvény vagy funktor meghívását egységes módon.
Egyszerű példa
#include <iostream>
#include <functional>
int osszeg(int a, int b) {
return a + b;
}
int main() {
std::cout << std::invoke(osszeg, 5, 10) << std::endl; // 15
return 0;
}
Osztálymetódusok meghívása
struct Ember {
int kor;
void udvozlet() {
std::cout << "Szia!" << std::endl;
}
};
int main() {
Ember e{25};
std::invoke(&Ember::udvozlet, e);
std::cout << "Kor: " << std::invoke(&Ember::kor, e) << std::endl;
return 0;
}
Kimenet:
Szia! Kor: 25
Összegzés
✅ std::function – Általános függvényobjektum, amely tárolhat lambda kifejezéseket és normál függvényeket.
✅ std::bind – Függvények előrekötése argumentumokkal.
✅ std::mem_fn – Osztálymetódusok hívása objektumokon.
✅ std::ref / std::cref – Referenciák továbbítása függvényeknek.
✅ std::invoke – Egységes függvényhívás bármilyen típusú callable objektum esetén.
A functional könyvtár segítségével hatékonyabb és rugalmasabb C++ kódokat írhatsz, különösen a modern C++11/14/17 szabványokkal kombinálva. 🚀
- functional - Szótár.net (en-hu)
- functional - Sztaki (en-hu)
- functional - Merriam–Webster
- functional - Cambridge
- functional - WordNet
- functional - Яндекс (en-ru)
- functional - Google (en-hu)
- functional - Wikidata
- functional - Wikipédia (angol)