2012-04-02 2 views
6

Что делать, если я хочу иметь массив указателей на функцию и размер массива неизвестен с самого начала? Мне просто интересно, есть ли способ сделать это. Использование нового заявления или, возможно, что-то еще. Что-то ищет похож наКак создать массив функций динамически?

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

ответ

8

Вы можете использовать std::vector:

#include <vector> 

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

Если вы действительно хотите использовать статический массив, было бы лучше сделать это с помощью FunPointer я, определенный в фрагменте выше :

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

Хотя я бы еще пойти для вектора решения, принимая во внимание, что вы не знаете размер массива во время компиляции и тха т вы используете C++, а не С.

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

или

#include <vector> 

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

С typedef, новое выражение тривиальна:

typedef void(*F)(void*); 

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

Без typedef, это несколько сложнее:

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

    if(testArray[3]) testArray[3](0); 
} 
Смежные вопросы