[c/c++] Kod wyniokwy - Funkcje

0

Witam.
Czytalem gdzies ze w c instnieje mozliwosc takiego mechaniuzmu jak w php czy perl a mianowicie:

#!/usr/bin/perl
sub funkcja{print "funkca";}
sub funkcja2{print "funkca2";}

my $nazwa_funkcji = <STDIN>; #pobranie nazwy funkcji
chomp $nazwa_funkcji; #usuniecie znaku nowego wiersza
&$nazwa_funkcji; #wywolanie funkcji

Nie wiem na ile w tym prawdy ale pytam Was o to. Wiem ze perl to jezyk skryptowy i to jest zupelnie cos innego ale przeciez w c po kompilacji tez zostaje wiadomosc o nazwie funkcji. Prosilbym o przyklad, linki albo o proste zaprzeczenie tego co napisalem. Pozdrawiam

0

ogolnie, nie ma prostej drogi. w C, mozna by sprobowac poprzez GetProcAddress, ale tak by dalo sie wywolac tylko funkcje bezparametrowa. cos w stylu:

char* nazwa = ...;
ptr = GetProcAddress(nazwa);
if(ptr) ptr();
else printf("nie ma takiej");

w C++ natomiast z powodu manglingu nazw - praktycznie sie nie da. jedyne co mozna, to zrobic dlugasnego if-then-else porownujacego wprowadzony tekst z stringami-"nazwami" i jak trafiony to wywolac odpowiednia.. potwor w stylu

string nazwa;
cin >> nazwa;
if(nazwa="mojaF") mojaF();
else if(nazwa="dodaj")dodaj();
else if ...
else cout << "nie ma takiej"; 
0

Dziekuje za odpowiec. Jak widac nie mozna tak zrobic ale to ja juz nie wiem co autor ksiazki php mial na mysli piszac to. W sumie to moglo byc takie rozwiazanie jak podales, albo tablica wskaznikow na funkcje albo jeszcze lepiej mapa ale myslalem ze jest cos bardziej niskopoziomowego ;).
Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1