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::_1
azt 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::ref
nélkül használnánk, anoveles()
nem módosítaná aza
vá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)