2012-04-02 74 views
6

Điều gì sẽ xảy ra nếu tôi muốn có một mảng con trỏ tới một hàm và kích thước của mảng không được biết ngay từ đầu? Tôi chỉ tò mò nếu có một cách để làm điều đó. Sử dụng tuyên bố mới hoặc có thể một cái gì đó khác. Một cái gì đó trông giống nhưLàm thế nào để tạo mảng các hàm động?

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

Trả lời

8

Bạn có thể sử dụng một std::vector:

#include <vector> 

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

Nếu bạn thực sự muốn sử dụng một mảng tĩnh, nó sẽ là tốt hơn để làm điều đó bằng cách sử dụng FunPointer i được xác định trong đoạn mã trên :

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

Mặc dù tôi vẫn sẽ đi cho giải pháp vector, có tính đến việc bạn không biết kích thước của mảng trong thời gian biên dịch và tha t bạn đang sử dụng C++ và không C.

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

hoặc

#include <vector> 

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

Với typedef, khái niệm mới là tầm thường:

typedef void(*F)(void*); 

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

Without typedef, nó được phần nào khó khăn hơn:

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

    if(testArray[3]) testArray[3](0); 
} 
Các vấn đề liên quan