» »

Array iz function pointer-jev

Array iz function pointer-jev

mercury ::

Živjo,
Rabil bi array tipa function pointer. Kdo ve, kako se ga definira in potem tudi uporablja ( če je sploh to mogoče? )?

L.P.

OwcA ::

V katerem jeziku?
Če je zadevščina tipsko varna je kaj takega vprašljivega smisla, razen če imaš zelo podobne funkcije (vrnejo in sprejemajo enake tipe).
Čemu sploh rabiš kaj takega, večinoma obstaja še kakšna pot.
Otroška radovednost - gonilo napredka.

mercury ::

Najprej, programiram v VC++.
Torej, imam spremenljivko tipa int. Odvisno od njene vrednosti bi rad klical različne funkcije. To naredil s switch stavkom, a mislim da bi bilo mogoče bolj elegantno zadevo rešiti s arrajem, v katerem bi bili naslovi funkcij.

L.P.

OwcA ::

Ne bi bilo.
Če že, potem raje uporabi funkcionale (objekti, ki imajo navzven vidno edinole metodo operator()), ker drugače boš imel težave s tipi (alternativa bi bil še kakšen polimorfizem, ampak to je še več kompliciranja.).
Otroška radovednost - gonilo napredka.

Vesoljc ::

funkcionale?

heh, pa ti si pravi toporisic :D
Abnormal behavior of abnormal brain makes me normal...

MaFijec ::

Čisto smiselen prenos iz matemtike.
funkcional -- preslikava, ki deluje na neki množici funkcij(iz X -> R ali C) in slika v realna(kompleksna) števila

Sergio ::

mercury, naredi lepo switch, pa basta. Najlepše narejeno, nabolj berljivo.

Ce hoces, da je pa se lepse, return vrednost poimenuj (0 assignaj vrednosti KLICI_PRVO_FUNKCIJO, 1 assignaj KLICI_DRUGO_FUNKCIJO, etc).

Zakaj komplicirat, ce ti ni treba. :)
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

trs ::

Nehajte tolko filozofirat :)

Dajte mu odgovor, tako se bo vsaj naucil kako se dela s pointerji na funkcije in bo lahko sam presodil ce se mu to izplaca ali ne. Pa se drugic ne bo vec rabil tega sprasevat ...

int vrni_ena(void) {
return 1;
}

int vrni_dva(void) {
return 2;
}

int vrni_tri(void) {
return 3;
}

int (*funcarray[3])(void) = { vrni_ena, vrni_dva, vrni_tri };

int main(void) {
int ii;

for (ii = 0; ii < sizeof(funcarray) / sizeof(funcarray[0]); ii++)
printf("%d\n", funcarray[ii]());
}

----

Pa namestio int (*funcarray[3])(void) je lepse ce se napise
typedef int (*foofunc)(void);
foofunc funcarray[3] = { ... };

OwcA ::

Kaj pa če hočem, da mi vrni_tri vrne float? ;)
Otroška radovednost - gonilo napredka.

trs ::

OWca ... pol je cas da redisagniras program :)

Ne vidim smisla, da imas en array funkcij, ki ti vracajo razlicne tipe ... in sprejemajo razlicne argumente? Na kaj konkretno namigujes?

OwcA ::

Na to, da je polje kazalcev na funkcije zelo redko dobra rešitev, prej pokazatelj napake v zasnovi.
Otroška radovednost - gonilo napredka.

trs ::

Za arraye na pointerje na funkcije v taki obliki, kot si je zamislil mercury, niso idealna resitev.
To se ne pomeni da so pointerji na funkcije slaba stvar ;) Ocitno jih mercury ne obvlada, zato je bil cajt da mu nekdo odpre oci :)

OwcA ::

To se ne pomeni da so pointerji na funkcije slaba stvar

Nikakor, le polje njih ni ravno užitna stvar. ;)
Otroška radovednost - gonilo napredka.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C] Funkcija vrnitev kazalca

Oddelek: Programiranje
101188 (904) MrStein
»

c++ lib,dll,h za uporabo v C#

Oddelek: Programiranje
91953 (1752) noraguta
»

[C] Sortiranje preštetih črk

Oddelek: Programiranje
61426 (1262) BigBoobs
»

[c++] standardni c++ in dogodki(events)

Oddelek: Programiranje
121749 (1574) yeti
»

Uporaba .dll

Oddelek: Programiranje
61373 (1333) Vesoljc

Več podobnih tem