Bármi, aminek van függvényhívás operátora. C-ből csak a függvénypointer ilyen, de amióta tudjuk overload-olni a függvényhívás operátort, bármilyen típus lehet az. A bármilyen típus tehát template paramétert jelent, ha át akarjuk venni függvényben.
További fogalmak:
- predikátum
- unáris predikátum
- bináris predikátum, avagy komparátor
a) Írjunk függvényt, ami egy sztringet tud karakterenként transzformálni az átvett (bármilyen típusú) funktorral!
std::string s = "Hello!";
transform_string(s, std::tolower);
b) Írjunk olyan funktor osztályt, ami Caesar-féle kódolást valósít meg a -> b elven. (Egyébként Caesar idején a -> d volt a kulcs, Augustus idején pedig a -> b.)
c) Írjunk funktor osztályt, ami tetszőleges eltolású Caesar-kódolást végez: 'a' -> 'a' + n.
d) Olyan funktor, ami round-robin elven működik: az első karaktert 1-gyel, a következőt 2-vel, stb. tolja el.
Megoldás
a) Készítsen generikus algoritmust (Count
), ami megszámlálja egy paraméterként kapott indexelhető objektum azon elemeit, amelyek megfelelnek a predikátummal megadott feltételnek! A predikátum legyen megadható funktorral is!
b) Készítsen olyan függvényt, ami predikátumként alkalmazható és képes eldönteni, hogy egy Idopont
nagyobb-e, mint 14 óra! Tételezze fel, hogy az 1b) feladatban elkészült Idopont
osztály tökéletesen működik, beolvasható, kiírható, valamint vannak relációs operátorai is!
c) Írjon kódrészletet, melyben beolvas maximum 140 db időpontot a 2. feladatban elkészített tárolóba, majd az a) feladatrészben elkészített függvénysablon és a b) feladatrészben elkészített predikátum segítségével kiírja, hogy a beolvasott időpontok közül hány darab nagyobb, mint 14 óra!
d) Írjon kódrészletet, melyben beolvas maximum 100 egész számot egy tömbbe, majd az a) feladatrészben elkészített függvénysablon segítségével kiírja, hogy a beolvasott számok közül hány szám páros!