Tarkoitus olisi, että pääohjelmassa pyörii vain yksi silmukka, jossa on laskuri (joka kierroksella arvo lisääntyy yhdellä). Silmukassa kutsutaan funktiota laskurin arvon avulla, eli funktioita on monta erilaista. Ajatus oli että funktiot olisi nimetty numeroin, näinhän homma toimisi yksinkertaisesti. Mutta toimiiko käytännössä?
Onko tuon tyyppistä juttua mahdollista toteuttaa c :ssa? Jotain konstia millä olisi helppo käydä läpi monia funktioita peräkanaa?
Onko tuon tyyppistä juttua mahdollista toteuttaa c :ssa? Jotain konstia millä olisi helppo käydä läpi monia funktioita peräkanaa?
Vastaukset 8
Vanhimmat
Myös funktioille, kuten datallekin, voidaan asettaa pointteri ja kutsua niitä sen perusteella:
http://www.eskimo.com/~scs/cclass/int/sx10a.html
Tuolla lisää tietoa esimerkkien kanssa:
http://oopweb.com/CPP/Documents/FunctionPointers/Volume/CCPP/FPT/em_fpt.html
Kuten tossa on jo vastattu, funktio-pointerilla tuon voi toteuttaa. Kuitenkin jos funktiot ovat erilaisia (kuten kirjoitit) esim. eivät ota samaa määrää parametreja, homma ei olekaan niin helppo.
Yleensä funktio-pointerit kannattaa suosiolla kiertää varsinkin kun C mahdollistaa olio-pohjaisen suunnittelun ja toteutuksen => tässä tapauksessa kannattaa varmaan miettiä miten ton vois toteuttaa ilman noita funktio-pointereita käyttämällä standardi C :n keinoja.
Katsoppas vaikka C FAQ: Functonoid.
polymorfisilla olioillahan on ylimääräisenä lastinaan vtable, joka sisältää funktiopointterit oikeisiin funktioihin jos teet:
Puu *p = new Tammi;
niin *p-oliossa on kai taulukko, jossa on pointterit kaikkiin virtuaalisiin funktioihin, jotta ohjelma osaa kutsua Tammen metodeita eikä Puun metodeita vaikka käytetään Puu-pointteria.
Sanoin tämän vain siksi, että kävisi ilmi, että oliot ja perintä on tehty "sillä silmällä", että näin voisi korvata omien funktiopointterien käytön
Pistä jonkinlainen esimerkki vaikka switch-case-tyyliin.
... tulee siis olemaan (ainakin ajatukseni mukaan), yksinkertaisia, kysytään kysymys ja annetaan vastaus. Jokainen funktio on erilainen, mutta palauttaa samanlaisen arvon (eli kokonaisluvun). (en ole vielä ohjelmaa suuremmin kirjoittanut)
Pointtereihin olen nyt tutustunut, mutta mikään esimerkki ei oikein kerro että miten tällainen juttu toteutetaan missä kutsutaan monta eri funktiota. Tai sitten en vaan tajua :P
Miten olet suunnitellut kutsujalohkossa antaa funktiolle parametrit?
Esim. näin sen voisi toteuttaa:
void f1(int);
void f2(int);
void f3(int);
typedef void (*fp)(int);
fp functions[3] = {f1, f2, f3};
Sitten vain kutsutaan funktioita tyyliin
functions[0](5);
esim.