generic function
Megjelenés
| polymorphism |
|---|
| ad hoc polymorphism |
| parametric polymorphism |
| subtyping |
Főnév
generic function (tsz. generic functions)
- (informatika) A generic function (általánosított függvény) olyan programozási konstrukció, amely lehetővé teszi, hogy a függvény típusfüggetlen legyen – vagyis többféle adattípussal is működjön anélkül, hogy minden típusra külön implementációt kellene írni. Ez a generikus programozás alapköve, különösen a C++-ban a template mechanizmus révén.
🧠 Miért fontos a generikus függvény?
Mert el akarjuk kerülni az ismételt kódírást. Például nem akarunk külön int, double, és string típusokra külön max függvényt írni.
📌 Példa C++-ban: sablonfüggvény (function template)
template <typename T>
T maximum(T a, T b) {
return (a > b) ? a : b;
}
int main() {
std::cout << maximum(3, 7) << std::endl; // int
std::cout << maximum(2.5, 1.3) << std::endl; // double
std::cout << maximum(std::string("alma"), std::string("banán")) << std::endl; // string
}
🧱 Szinaktika
template <typename T>
T functionName(T param1, T param2) {
// test, operate on param1, param2
}
Vagy:
template <class T>
A typename és a class kulcsszavak itt szinonimák.
🧪 További példa: swap függvény
template<typename T>
void mySwap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
💡 Több típusparaméter is lehet
template<typename T, typename U>
void printPair(T first, U second) {
std::cout << first << " - " << second << std::endl;
}
🧰 Használat STL-ben
A C++ Standard Template Library (STL) számos generikus függvényt használ. Például:
std::sort(vec.begin(), vec.end()); // működik int, string, float, stb.
std::find(vec.begin(), vec.end(), x); // működik bármely összehasonlítható típussal
Ezek sablonként (template) vannak implementálva, így típusfüggetlenek.
🧬 Előnyök
✅ Kód újrafelhasználhatóság ✅ Típusbiztonság fordítási időben ✅ Kevésbé duplikált kód
⚠️ Lehetséges problémák
❌ A hibaüzenetek bonyolultak lehetnek sablonhasználatkor ❌ Nem minden típus működik automatikusan – összehasonlító operátorok pl. kellenek ❌ A túlzott sablonhasználat bonyolulttá teheti a kódot
🧠 Generikus vs. Overload
| Jellemző | Overload | Generikus függvény |
|---|---|---|
| Kódduplikáció | Lehet sok | Nem |
| Bővíthetőség | Új típus = új verzió | Új típus automatikus |
| Típusok szerint különböző működés | Könnyű | Típus-specializáció kell |
🔄 Speciális típuskezelés – Sablonspecializáció
template<>
const char* maximum(const char* a, const char* b) {
return (strcmp(a, b) > 0) ? a : b;
}
🧠 TL;DR
- A generikus függvény egy olyan függvény, amely sablonparaméterekkel működik, így különböző típusokkal hívható meg.
- Lehetővé teszi, hogy típusfüggetlen, újrafelhasználható kódot írjunk.
- A C++
templatemechanizmusa ennek az alapja.
- generic function - Szótár.net (en-hu)
- generic function - Sztaki (en-hu)
- generic function - Merriam–Webster
- generic function - Cambridge
- generic function - WordNet
- generic function - Яндекс (en-ru)
- generic function - Google (en-hu)
- generic function - Wikidata
- generic function - Wikipédia (angol)