Strona 1 z 1

Wywołanie funkcji zapisanej w String'u

Nowy postNapisane: czwartek, 26 listopada 2009, 20:15
przez Koziol
W jaki sposób wywołać funkcje której nazwe mamy w string'u?
Mianowice mamy na formie TEdit o nazwie np. Edit1 oraz kod:
Kod: Zaznacz cały
String funkcja = "Jakas_klasa_inna_niż_klasa_Form1->Jakas_Funkcja(Edit1->Text)";
/*
W jaki sposób wywołać teraz tą funkcje z ów parametrem?
*/

Re: Wywołanie funkcji zapisanej w String'u

Nowy postNapisane: piątek, 27 listopada 2009, 08:36
przez Cyfrowy Baron
Nie bardzo widzę na to sposób. Jedyne co mi teraz przychodzi do głowy, to porada, którą umieściłem w serwisie Cyfrowy Baron w dziale: porady -> ciekawostki ->Konwertowanie klasy TComponent na łańcuch znaków i odwrotnie. To nie jest odpowiedź na Twoje pytanie, ale może coś z tego zrobisz.

Nie bardzo jednak rozumiem, co to ma wspólnego z wzorcem projektowym.

Re: Wywołanie funkcji zapisanej w String'u

Nowy postNapisane: piątek, 27 listopada 2009, 12:16
przez Cyfrowy Baron
Co do PHP i co do tego, że to język skryptowy to masz rację, ale skrypty mogą być tylko wykonywane wewnątrz pewnej aplikacji, w odróżnieniu od programów nie skryptowych, które wykonują się niezależnie od innych aplikacji. Do przetwarzania skryptów niezbędne są interpretatory, które interpretują kod źródłowy programu skryptowego (skryptu) i wykonują przeanalizowane fragmenty. Interpreter musi analizować każde wyrażenie i dopiero po przeanalizowaniu skryptu może wykonać akcję. Interpretacja kodu wymaga jego parsowania, wiec polymorphism ma rację co do tego, że potrzebujesz parsera.

Nie wiem skąd to się bierze, ale osoby, które przed nauką programowania posługiwały się językami skryptowymi mają tendencję do porównywania tych języków, a często nawet próbują przenosić funkcje z języka skryptowego do języka programowania.



Co do Twojego problemu, to ja również sądzę, że źle się do tego zabierasz. Zakładając, że będziesz w zmiennych typu String przechowywał nazwy obiektów (klas) i funkcji, to przecież i tak musisz w programie stworzyć te funkcje i obiekty, a potem w zależności od zawartości zmiennej String będziesz odwoływał się do konkretnego obiektu i funkcji., Rozwiązanie nasuwa się samo, rób to poprzez identyfikatory i funkcję, sugerowałbym jednak zamiast zmienną typu String posłużyć się raczej typem int np:

Kod: Zaznacz cały
void Funckja1(void)
{
// coś tam 1
}
//----------------------------------------------------------------
void Funckja2(void)
{
// coś tam 2
}
//----------------------------------------------------------------
void Funckja3(void)
{
// coś tam 3
}
//----------------------------------------------------------------
void Funckja4(void)
{
// coś tam 4
}
//----------------------------------------------------------------
void __fastcall WykonajDzialanie(int ID)
{
switch(ID)
{
  case 1: Funkcja1(); return;
  case 2: Funkcja1(); return;
  case 3: Funkcja1(); return;
  case 4: Funkcja1(); return;
}
}
//+++++++++++++++++++++++++++++++++++++++++++++
void __fastcall TForm1::Button1(TObject *Sender)
{
  int ID = 3;
  WykonajDzialanie(3);
}


Ten pomysł ze String się nie sprawdzi. Zadziała w odniesieniu do obiektów, gdyż można posłużyć się funkcją FindComponent, ale nie w odniesieniu do klas nie będących obiektami i nie w odniesieniu do funkcji. Być może istnieje jakiś sposób do tego co wymyśliłeś, ale ja o czymś podobnym nigdy nie słyszałem.

Nie sugeruj się skryptami PHP, bo sprowadzi to Ciebie na manowce...

Re: Wywołanie funkcji zapisanej w String'u

Nowy postNapisane: piątek, 27 listopada 2009, 15:05
przez Koziol
Ok, postaram się nie przenosić funkcji z PHP do C++



Wracając do tematu:
polymorphism napisał(a):napisz sobie parser (uproszczony) C++ i zrób bindy klas VCL-owskich.

mógł byś nieco bardziej rozjaśnić ów temat?
Link do jakiegoś artykułu o tworzeniu paresera czy bind'owania klas VCL? Nie zabardzo wiem jak tego w google (czego dokładnie poszukać).

Z góry dziękuje za pomoc.