polymorphism |
---|
ad hoc polymorphism |
parametric polymorphism |
subtyping |
generic function (tsz. generic functions)
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.
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
}
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.
template<typename T>
void mySwap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
template<typename T, typename U>
void printPair(T first, U second) {
std::cout << first << " - " << second << std::endl;
}
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.
✅ Kód újrafelhasználhatóság ✅ Típusbiztonság fordítási időben ✅ Kevésbé duplikált kód
❌ 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
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 |
template<>
const char* maximum(const char* a, const char* b) {
return (strcmp(a, b) > 0) ? a : b;
}
template
mechanizmusa ennek az alapja.