El siguiente código C++ es una versión simplificada de lo que quiero hacer, solo para mostrar la estructura general.
En cada caso de la "función_primaria()" la estructura es idéntica:
función() + 2
Lo único que cambia es la función que se utiliza (función 1, 2, 3 o 4).
¿Existe una manera más eficiente de hacer esto para no estar "repitiendo" el código en cada caso? Gracias.
#include <iostream> using namespace std; int function1(int a){ return a; } int function2(int b){ return b*b; } int function3(int c){ return c*c + c; } int function4(int d){ return 5*d; } int primary_function(int x, int selection){ switch(selection){ case(1): return function1(x) + 2; break; case(2): return function2(x) + 2; break; case(3): return function3(x) + 2; break; case(4): return function4(x) + 2; break; } } int main(){ cout << primary_function(6,1) << endl; cout << primary_function(6,2) << endl; cout << primary_function(6,3) << endl; cout << primary_function(6,4) << endl; return 0; }Puede usar una matriz de punteros de función de la siguiente manera:
int primary_function(int x, int selection) { using fn_ptr_t = int (*)(int); static fn_ptr_t functions[] = { function1, function2, function3, function4 }; return functions[selection - 1](x) + 2; } También puede usar std::function<int(int)> como el tipo de elemento de la matriz, lo que le permitiría usar lambdas, incluso con cierres, en la matriz en lugar de solo funciones con nombre.