Как динамически создать массив функций? - PullRequest
6 голосов
/ 02 апреля 2012

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

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

Ответы [ 3 ]

8 голосов
/ 02 апреля 2012

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

#include <vector>

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

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

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

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

5 голосов
/ 03 апреля 2012

С 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);
}
1 голос
/ 02 апреля 2012
for(i=0;i<length;i++)
A[i]=new node

или

#include <vector>

std::vector<someObj*> x;
x.resize(someSize);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...