Wywołanie funkcji zapisanej w String'u

dział ogólny

Wywołanie funkcji zapisanej w String'u

Nowy postprzez Koziol » czwartek, 26 listopada 2009, 20:15

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?
*/
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Wywołanie funkcji zapisanej w String'u

Nowy postprzez Cyfrowy Baron » piątek, 27 listopada 2009, 08:36

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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4731
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 445
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Wywołanie funkcji zapisanej w String'u

Nowy postprzez Cyfrowy Baron » piątek, 27 listopada 2009, 12:16

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...
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4731
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 445
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Wywołanie funkcji zapisanej w String'u

Nowy postprzez Koziol » piątek, 27 listopada 2009, 15:05

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.
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 12 gości

cron