jak wywołac funckję z tablicy

Odpowiedz Nowy wątek
2014-12-31 10:27
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 :)

Pozostało 580 znaków

2014-12-31 10:46
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.


edytowany 1x, ostatnio: Patryk27, 2014-12-31 10:46

Pozostało 580 znaków

2014-12-31 11:27
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

edytowany 4x, ostatnio: wiciu, 2015-01-02 14:48
jeśli już używasz normalnego C++ - porzuć tablice z C - spartanPAGE 2014-12-31 20:10
Słuszna uwaga. Zaktualizowałem kod i użyłem wektora zamiast tablicy z C. - wiciu 2015-01-01 18:27
+ oznacz operacje jako abstrakcyjna, a resztę dziedzicząca jako przykrywającą; I pętla foreach - spartanPAGE 2015-01-01 20:25
Nie wiem, czy o to Ci chodziło, ale dodałem override'y do metod, ale trzeba wtedy pamiętać, aby skompilować aplikację zgodnie ze standardem C++11: g++ -std=c++11 sample.cpp -o sample. Jeżeli dodam słowo kluczowe abstract przed klasą Operation, to nie będę mógł wtedy tworzyć instancji tej klasy w wektorze operations. - wiciu 2015-01-01 20:44
Będziesz mógł tworzyć instancje klas implementujące dana metode - spartanPAGE 2015-01-02 16:00

Pozostało 580 znaków

2014-12-31 11:44
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);

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-31 15:51
Świetny Kot
0

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

Pozostało 580 znaków

2014-12-31 16:11
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.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-31 20:05
0

http://en.cppreference.com/w/cpp/utility/functional/bind


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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