2012-04-02 19 views
6

Cosa succede se si desidera disporre di una matrice di puntatori a una funzione e la dimensione della matrice non è nota dall'inizio? Sono solo curioso di sapere se c'è un modo per farlo. Usando nuove affermazioni o forse qualcos'altro. Qualcosa di ricerca simile aCome creare una serie di funzioni in modo dinamico?

void (* testArray[5])(void *) = new void()(void *); 

risposta

8

È possibile utilizzare un std::vector:

#include <vector> 

typedef void (*FunPointer)(void *); 
std::vector<FunPointer> pointers; 

Se davvero si vuole utilizzare un array statico, sarebbe meglio farlo utilizzando il FunPointer ho definito in questo frammento di codice :

FunPointer testArray[5]; 
testArray[0] = some_fun_pointer; 

anche se mi sarebbe ancora andare per la soluzione vettore, tenendo conto che non si conosce la dimensione della matrice durante il tempo di compilazione e tha t che utilizza C++ e non C.

1
for(i=0;i<length;i++) 
A[i]=new node 

o

#include <vector> 

std::vector<someObj*> x; 
x.resize(someSize); 
5

Con typedef, la nuova espressione è banale:

typedef void(*F)(void*); 

int main() { 
    F *testArray = new F[5]; 
    if(testArray[0]) testArray[0](0); 
} 

Senza typedef, è un po 'più difficile:

void x(void*) {} 
int main() { 
    void (*(*testArray))(void*) = new (void(*[5])(void*)); 
    testArray[3] = x; 

    if(testArray[3]) testArray[3](0); 
} 
Problemi correlati