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