2012-04-02 23 views
6

¿Qué sucede si quiero tener una matriz de punteros a una función y el tamaño de la matriz no se conoce desde el principio? Solo tengo curiosidad si hay una manera de hacer eso. Usando una nueva declaración o tal vez alguna otra cosa. Algo que mira similar a¿Cómo crear una matriz de funciones de forma dinámica?

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

Respuesta

8

Se puede usar un std::vector:

#include <vector> 

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

Si realmente desea utilizar una matriz estática, sería mejor hacerlo utilizando el FunPointer i definida en el fragmento anterior :

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

aunque todavía iría por el vector solución, teniendo en cuenta que usted no sabe el tamaño de la matriz durante el tiempo de compilación y tha t que está utilizando C++ y no 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 nueva expresión es trivial:

typedef void(*F)(void*); 

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

Sin typedef, que es algo más difícil:

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

    if(testArray[3]) testArray[3](0); 
} 
Cuestiones relacionadas