Modtage et funktion navn som argument og så kalde denne funktion

Tags:    c++

Hej,

Jeg har en function der ser nogenlunde sådan her ud:

void test(string functionname){
Her skulle function functionname så gerne kaldes - how?
}

Denne function skulle så gerne kalde den function der er defineret i argumentet functionname.

Hvordan gør man lige det?
Det skal helst være sådan at function test ikke skal ændres selvom der kommer nye functioner som skal kaldes via denne function - er dette muligt?







Hej,

Jeg har en function der ser nogenlunde sådan her ud:

void test(string functionname){
Her skulle function functionname så gerne kaldes - how?
}

Denne function skulle så gerne kalde den function der er defineret i argumentet functionname.

Hvordan gør man lige det?
Det skal helst være sådan at function test ikke skal ændres selvom der kommer nye functioner som skal kaldes via denne function - er dette muligt?




Nu spørger jeg selvfølgelig dumt, meen.... Hvorfor kalde en funktion der kalder en anden funktion? Hvorfor kalder du ikke bare funktionen? Det ville være et par længder nemmere...



Hey Jesper,
hvilket framework arbejder du med/Hvilken ide bruger du? :)

Mads: Det er vel i forbindelse med noget scripting af en art?



"
Nu spørger jeg selvfølgelig dumt, meen.... Hvorfor kalde en funktion der kalder en anden funktion? Hvorfor kalder du ikke bare funktionen? Det ville være et par længder nemmere..."

Fra en PC modtager jeg (på min håndholdte enhed f.eks. via RS232) navnet på den funktion der skal kaldes, og relevante parametere.

Min test funktion på den håndholdte enhed skal så sørge for at kalde disse funktioner og følge lidt med i resultatet.

Når der så kommer nye funktioner på den håndholdte enhed, vil jeg gerne kunne teste disse uden at skulle ændre noget i min test funktion på den håndholdte enhed - jeg vil kun ændre på PC siden.







Indlæg senest redigeret d. 20.04.2007 13:02 af Bruger #11699
Det du søger er en funktions pointer (function pointer). Det er en pointer der peger på en funktion, og kan bruges den vej. På denne måde kan du sende et funktionsnavn til en funktion, der senere kan kalde den. En funktions pointer har en meget speciel syntaks, men det lærer man hurtigt.

En funktions pointer ser ud på denne måde:
Fold kodeboks ind/udKode 

Her kommer to eksempler:
Fold kodeboks ind/udKode 

Fold kodeboks ind/udKode 

Håber du forstår der nogenlunde.
Hvis ikke, så har jeg lavet et lille hurigt eksempel;
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 20.04.2007 17:54 af Bruger #8422
Mon det er noget i stil med dette du er ude efter?

Fold kodeboks ind/udKode 


Når programmet kører kendes navnene på funktionerne ikke, så dem er du nødt til selv at holde styr på.

Hvis dine funktioner tager forskellige argumenter er du/vi nødt til at finde en løsning på det.



Tak for svar og hjælp :-)

Jeg har fået et forslag der går på at finde addresserne på funktionerne i MAP filen (fra kompileringen af kode på den håndholdte dims). Så kan jeg i mit kald fra PC'en sende denne addresse, og har så en pointer til den rigtige funktion.
På den måde behøver jeg kun at rette i PC koden når der kommer en ny funktion.

Dette løser dog ikke det problem at de funktioner jeg vil kalde har forskelligt antal argumenter og forskellige typer argumenter.

Det kan godt være den eneste løsning er på den håndholdte dims at lave noget i retning af:
switch (funktionsnavn)
{
case "a": a(12,"wwe");
case "b": b("hhjj",123);
}
Men så kan jeg ikke nøjes med at rette på PC siden når der kommer en ny funktion i den håndholdte.







Indlæg senest redigeret d. 21.04.2007 22:18 af Bruger #11699
For de fleste typer kan du slippe af sted med at lave alle funktioner så det tager det samme antal argumenter af typen int.
I funktionerne caster du så til de rigtige typer.
Det løser dog ikke problemet med at få pakket data ud.
Jeg kan ikke rigtigt se at det hjælper at kikke i map filen.



t