• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tablica funkcji ?

Object Storage Arubacloud
0 głosów
210 wizyt
pytanie zadane 5 listopada 2016 w C i C++ przez Munvik Dyskutant (9,350 p.)

Mam pytanko. Czy można zrobić coś w stylu tablicy funkcji ? 

TablicaFunkcji[5]; //deklaracja, nie wiem jakiego typu mozna uzyc

//dodać do tej tablicy funkcje i przy wywolaniu

TablicaFunkcji[2]; // żeby ona się wykonywała.

Jeżeli tak to proszę o jakiś kod prezentujący taką operację.

4 odpowiedzi

+1 głos
odpowiedź 5 listopada 2016 przez CzikaCarry Szeryf (75,340 p.)

Możesz zrobić coś w takim stylu:

void funkcja1(){ }
void funkcja2(){ }
void funkcja3(){ }

void TablicaFunkcji(int index)
{
 switch(index)
 {
 case 1:
   funkcja1();
   break;
 case 2:
   funkcja2();
   break;
 case 3:
   funkcja3();
   break;
}

 

komentarz 5 listopada 2016 przez Munvik Dyskutant (9,350 p.)
No fajne fajne ale mam większą potrzebę.

Chcę zrobić klasę przycisk i zrobić to tak, żeby każdy przycisk miał swoją przypisaną funkcję, żeby po uruchomieniu buttona (np klikniecie myszki) wykonała się ta jego funkcja.

Używam SFML.
komentarz 5 listopada 2016 przez Munvik Dyskutant (9,350 p.)
Może jakiś wskaźnik na funkcję ? To działa ?
+1 głos
odpowiedź 5 listopada 2016 przez JAKUBW Nałogowiec (33,470 p.)

Tak, możesz zrobić "wskaźniki na funkcję lub metodę" a następnie dodać te wskaźniki do tablicy. Ale uprzedzam, w c++ nie jest to proste i można się w tym zgubić.

komentarz 5 listopada 2016 przez Munvik Dyskutant (9,350 p.)
Może jakiś przykładzik pls ? xD
komentarz 5 listopada 2016 przez JAKUBW Nałogowiec (33,470 p.)
Nie mam, bo jak z tym robiłem to mnie szlag mnie trafiał. Musisz posiedzieć nad tym posiedzieć chwilę (dłuższą chwilę) i zrozumiesz o co chodzi. A teraz robię w C# gdzie są delegaty, czyli bardzo wygodne wskaźniki na funkcję :)
+1 głos
odpowiedź 5 listopada 2016 przez Avernis Nałogowiec (27,400 p.)

możesz użyć std::vector i jako parametr podać std::any, lub boost::any z biblioteki boost: http://www.boost.org/

I przesyłać do niego funkcje:

void func(int x, int*y, double &z)
{
}

std::vector<boost::any> tablicaFunkcji;

tablicaFunkcji.push_back(func(1, &jakastamzmienna, kolejnazmienna));

Jakoś tak to wyglądało

komentarz 5 listopada 2016 przez criss Mędrzec (172,590 p.)

Nie sądze żeby tak to wyglądało. 

To jest wywołanie funkcji :

func(1, &jakastamzmienna, kolejnazmienna)

a że func zwraca void, to do vectora dodajesz... nic.

Poza tym... boost::any? Po co? Mamy wskaźniki na funkcje...

komentarz 5 listopada 2016 przez Avernis Nałogowiec (27,400 p.)
Ja używam boosta bo można każdą funkcję tak włożyć.
komentarz 5 listopada 2016 przez adrian17 Ekspert (344,860 p.)

bo można każdą funkcję tak włożyć.

"you were so preoccupied with whether or not you could, you didn’t stop to think if you should."

Nie widzę przypadku w którym std::any byłby dobrym pomysłem do przechowywania funkcji. Zazwyczaj powinien wystarczyć wskaźnik, lub std::function jeśli chcesz też trzymać obiekty funkcyjne.

+1 głos
odpowiedź 5 listopada 2016 przez criss Mędrzec (172,590 p.)

Tak, możesz. Poczytaj o wskaźnikach na funkcje.

Przykładowa tablica:

void f1(int a, float b) { ... }
void f2(int a, float b) { ... }

void (*fArray[2])(int, float) = { &f1, &f2 };

//przykładowe wywołanie:

fArray[1](1, 1.f);

Ew. zamiast wskaźników na funkcje użyj std::function, ale ofc czyste wskaźniki są "lżejsze".

komentarz 8 listopada 2016 przez Munvik Dyskutant (9,350 p.)
Dziękuję ;)

Podobne pytania

+1 głos
2 odpowiedzi 322 wizyt
pytanie zadane 21 lipca 2021 w C i C++ przez Daaa22 Dyskutant (8,250 p.)
0 głosów
1 odpowiedź 515 wizyt
pytanie zadane 12 lutego 2016 w C i C++ przez konrad99 Gaduła (4,090 p.)
0 głosów
1 odpowiedź 420 wizyt
pytanie zadane 12 sierpnia 2018 w C i C++ przez Slegnawierzchowcu Użytkownik (860 p.)

92,566 zapytań

141,420 odpowiedzi

319,615 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...