Перебор функций в c++
реализую систему управления манипулятором на сервоприводах и есть некоторое количество точек траектории движения манипулятора, который управляется сервоприводами, описал траекторию точек через набор функций, и вот вопрос как реализовать перебор этих функций в зависимости от пришедшего задания. Возможно ли избежать использование конструкций if-else или switch-case?
Ответы (1 шт):
Это классическая задача, которая сводится к тому, что все функции, которые Вы хотите "перебирать", должны иметь одинаковую сигнатуру и все это потом помещается в std::map. Вот где то так
#include <iostream>
#include <map>
void foo1(int a) {
std::cout << "foo1(" << a << ")\n";
}
void foo2(int a) {
std::cout << "foo2(" << a << ")\n";
}
void foo3(int a) {
std::cout << "foo3(" << a << ")\n";
}
using func_t = void(*)(int a);
int main()
{
std::map<std::string, func_t> m = {
{"1", foo1},
{"2", foo2},
{"3", foo3},
};
m["2"](5);
return 0;
}
Что делать, если сигнатуры разные? тут проблема, но можно просто добавит все нужные параметры и просто не использовать. Или завести 2-3 мапы для разных типов.
В примере выше используется строковый ключ для поиска фукнции, если ключ просто число или перечисление (enum), то вполне можно использовать и массив/вектор.