Воскресенье, 17 Ноября 2024, 19:25

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Динамический массив указателей на функции
SaiteiДата: Вторник, 28 Января 2014, 22:59 | Сообщение # 1
старожил
Сейчас нет на сайте
Как это сделать?
+как поместить указатель на функцию в очередь?

p.s. нужно для того, чтобы N функций, переданных в одном участке кода, выполнились в другом участке. Как-то так

Добавлено (28.01.2014, 22:59)
---------------------------------------------
P.S. смог сделать статический одномерный массив указателей на функции:

Код
int A(int a)
{
  return a+1;
}
int B(int b)
{
  return b+2;
}
int C(int c)
{
  return c+3;
}

int (*UK[])(int) = {A,B,C};

Но это не то, ибо здесь известно сколько памяти нужно выделить


Сообщение отредактировал Saitei - Вторник, 28 Января 2014, 22:57
RUNGOGET2THECHOPAHДата: Вторник, 28 Января 2014, 23:10 | Сообщение # 2
участник
Сейчас нет на сайте
Код

typedef int (*FunctionPointer)(int);

int main()
{
  FunctionPointer* functions = new FunctionPointer[arraySize];

  ...

  delete[] functions;

  return 0;
}
SaiteiДата: Вторник, 28 Января 2014, 23:17 | Сообщение # 3
старожил
Сейчас нет на сайте
RUNGOGET2THECHOPAH,
typedef int (*FuncP)(int);
FuncP* funcs = new FuncP;
funcs[0] = A;
funcs[0](2);
я делаю что-то не так?
RUNGOGET2THECHOPAHДата: Вторник, 28 Января 2014, 23:25 | Сообщение # 4
участник
Сейчас нет на сайте
Saitei, Если тебе нужен массив, то указывай его размер в операторе new (не new FuncP, а new FuncP[arraySize]). Освободить память delete'ом еще забыл. Ну а так вроде все правильно.
SaiteiДата: Вторник, 28 Января 2014, 23:33 | Сообщение # 5
старожил
Сейчас нет на сайте
RUNGOGET2THECHOPAH, а, да.... Всё правильно, спасибо огромное! Я просто даже забыл что функция сама по себе ничего не выводит =)))
vasua99Дата: Вторник, 28 Января 2014, 23:49 | Сообщение # 6
GNU follower
Сейчас нет на сайте
Код

typedef void (*pFunc)();

...

pFunc funcArray[] = new pFunc[10];

for(int i = 0; i < 10; i++)
     funcArray[i] = ...;

funcArray[0]();
funcArray[3]();

delete[] funcArray;

Добавлено (28.01.2014, 23:49)
---------------------------------------------
Поздно написал, страницу не обновлял долго)


Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)

Сообщение отредактировал vasua99 - Вторник, 28 Января 2014, 23:48
maxxCДата: Вторник, 28 Января 2014, 23:49 | Сообщение # 7
был не раз
Сейчас нет на сайте
почему еще никто не предложил?
http://www.cplusplus.com/reference/functional/function/function/
vasua99Дата: Вторник, 28 Января 2014, 23:55 | Сообщение # 8
GNU follower
Сейчас нет на сайте
Ну человек не совсем это просил, да и в данном случае использовать массив указателей проще. smile

Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
SaiteiДата: Среда, 29 Января 2014, 00:10 | Сообщение # 9
старожил
Сейчас нет на сайте
хорошо, а как в стек\очередь засунуть?
queue <int (*Func)(int)> a; <- так нельзя вроде объявить очередь
vasua99Дата: Среда, 29 Января 2014, 00:18 | Сообщение # 10
GNU follower
Сейчас нет на сайте
Вполне можно, чем ему указатель на функцию не понравится?)

Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
maxxCДата: Среда, 29 Января 2014, 00:21 | Сообщение # 11
был не раз
Сейчас нет на сайте
Ты не должен использовать имя, когда задаешь параметр шаблона.
Цитата
std::queue<int (*)(int)> a;


И можешь объявить так:
Цитата
typedef void (*MyFunc)(void);
std::queue<MyFunc> my_queue;

или
Цитата
std::queue<MyFunc*> my_queue;
SaiteiДата: Среда, 29 Января 2014, 00:32 | Сообщение # 12
старожил
Сейчас нет на сайте
Так много нового за сегодня открыл) Спасибо вам всем за помощь
XakepДата: Среда, 29 Января 2014, 07:15 | Сообщение # 13
めちゃくちゃちゃ
Сейчас нет на сайте
стек можешь через std::vector делать, push_back положить элемент в стек, pop_back вытащить верхушку стека
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг