Mentre questo si basa sulle risposte sterline altrove in questa pagina, ho avuto un caso d'uso che non è stato completamente risolto da loro; per un vettore di puntatori a funzione effettuare le seguenti operazioni:
#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;
}
Qualcosa di simile è utile se si sta scrivendo un interprete di comandi con funzioni indicizzati che hanno bisogno di essere sposato con sintassi dei parametri e Aiutateci ecc Possibilmente anche utile nei menu.
So che questo è vecchio, ma non capisco l'uso di '(a. * A.x)()'. Perché lo '(a. * X)()' non funziona? –
@gau perché x non è nel campo di applicazione –
@gau ho aggiunto Parens ora per renderlo più chiaro –