Si bien esto se basa en la libra respuestas en otra parte de esta página, que tenía un caso de uso que no fue completamente resuelto por ellos; para un vector de punteros a funciones de hacer lo siguiente:
#include <iostream>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
class A{
public:
typedef vector<int> (A::*AFunc)(int I1,int I2);
vector<AFunc> FuncList;
inline int Subtract(int I1,int I2){return I1-I2;};
inline int Add(int I1,int I2){return I1+I2;};
...
void Populate();
void ExecuteAll();
};
void A::Populate(){
FuncList.push_back(&A::Subtract);
FuncList.push_back(&A::Add);
...
}
void A::ExecuteAll(){
int In1=1,In2=2,Out=0;
for(size_t FuncId=0;FuncId<FuncList.size();FuncId++){
Out=(this->*FuncList[FuncId])(In1,In2);
printf("Function %ld output %d\n",FuncId,Out);
}
}
int main(){
A Demo;
Demo.Populate();
Demo.ExecuteAll();
return 0;
}
Algo como esto es útil si usted está escribiendo un intérprete de comandos con funciones de indexado que necesitan para casarse con sintaxis de los parámetros y de ayuda consejos etc. Posiblemente también es útil en menús.
Sé que esto es viejo, pero no entiendo el uso de '(a. * A.x)()'. ¿Por qué '(a. * X)()' no funciona? –
@gau porque x no está en el alcance –
@gau he agregado parens ahora para hacerlo más claro –