jak wywołac funckję z tablicy

0

Witam,

mam zbiór funkcji które operują na tych samych argumentach, chciałbym je zbiorowo wywołać.

Mam tablicę znaków

 
char tablica[1][20] = {"nazwa_1","nazwa_2"} ;

próbuje ją wywołać w taki sposób ale nie działa :

(tablica[0])(argumenty)

jakiś pomysł? z góry dzięki :)

0

Tak śe-ńe-da.
Musisz przekazywać wskaźniki na funkcje albo zrobić osobną funkcję, która będzie mapować nazwę z jej wskaźnikiem.

1

Dobra okazja, żebym odświeżył sobie wiedzę z C++. Nie wiem, jak to zrobić w C, ale mogę podać Ci propozycję rozwiązania problemu w C++.
Jedyny sensowny sposób, który mi się nasuwa, to stworzenie klasy abstrakcyjnej z metodą wirtualną, a następnie dziedziczenie po tej klasie i odpowiednia implementacja wspomnianej metody. Następnie tworzysz tablicę wskaźników na klasę abstrakcyjną i dodajesz do niej odpowiednie obiekty.

Poniżej zamieszczam przygotowany na szybko przykład prezentujący tę ideę.

#include <iostream>
#include <vector>

class Operation {
  public:
    virtual void execute(int a, int b) {}
};

class Add : public Operation {
  public:
    void execute(int a, int b) override {
      std::cout << a + b << std::endl;
    }
};

class Subtract : public Operation {
  public:
    void execute(int a, int b) override {
      std::cout << a - b << std::endl;
    }
};


int main()
{
    std::vector<Operation*> operations;
    operations.push_back(new Add());
    operations.push_back(new Subtract());

    for(Operation* operation : operations) {
       operation->execute(3,2);
    }

    operations.clear();
    return 0;
}

Kod można skompilować następująco: g++ -std=c++11 sample.cpp -o sample

2
void add(double a,double b) { cout<<a<<" + "<<b<<" = "<<(a+b)<<endl; }
void sub(double a,double b) { cout<<a<<" - "<<b<<" = "<<(a-b)<<endl; }
void mul(double a,double b) { cout<<a<<" * "<<b<<" = "<<(a*b)<<endl; }

typedef void Fun(double a,double b);
Fun *tb[]={ &add,&sub,&mul };

for(int i=0;i<sizeof(tb)/sizeof(*tb);++i) tb[i](7,3);
0

Czy da się zapisać funkcje do tablicy razem z parametrami? + co jeśli każda funkcja bierze inną ilość parametrów?

0
Świetny Kot napisał(a):

Czy da się zapisać funkcje do tablicy razem z parametrami?

void add(double a,double b) { cout<<a<<" + "<<b<<" = "<<(a+b)<<endl; }
void sub(double a,double b) { cout<<a<<" - "<<b<<" = "<<(a-b)<<endl; }
void mul(double a,double b) { cout<<a<<" * "<<b<<" = "<<(a*b)<<endl; }
 
typedef void Fun(double a,double b);
struct { Fun *fun; double a,b; } tb[]={ {&add,5,4},{&sub,7,5},{&mul,9,6} };
 
for(int i=0;i<sizeof(tb)/sizeof(*tb);++i) tb[i].fun(tb[i].a,tb[i].b);
Świetny Kot napisał(a):

co jeśli każda funkcja bierze inną ilość parametrów?

Wtedy masz bubel projektowy.
Ale możesz stworzyć pewną hierarchię klas, w klasie są parametry zaś odpalasz wirtualną metodę klasy bazowej.

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