Динамический массив указателей на функции
|
|
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 вытащить верхушку стека
|
|
| |