| Динамический массив указателей на функции | 
|  | 
| 
| 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 Сейчас нет на сайте | Ну человек не совсем это просил, да и в данном случае использовать массив указателей проще.   
 Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
 |  |  |  |  | 
| 
| 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 вытащить верхушку стека |  |  |  |  |