| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > указатель на функцию |
| Автор: fear 18.9.2007, 14:26 | ||||
| Возможно ли объявить указатель на функцию, результатом выполнения которой являлся бы указатель на аналогичную функцию? Например, указатель на функию, результатом выполнения которой является значение типа int:
Нужно что то типа:
|
| Автор: UnrealMan 18.9.2007, 14:38 |
| Невозможно. |
| Автор: archimed7592 18.9.2007, 14:52 |
| fear, ну это точно также как объект содержащий самого себя. Никогда не смотрел в два стоящих друг напротив друга зеркала? Ситуация аналогичная. |
| Автор: fear 19.9.2007, 08:17 | ||
Всё таки возможно
|
| Автор: Daevaorn 19.9.2007, 09:23 |
через одно место и GC в С++ можно получить. |
| Автор: fear 20.9.2007, 06:57 | ||||||
не правильно Вопрос был следующий:
Добавлено @ 07:00
А где в примере одно место? И что такое GC? |
| Автор: archimed7592 20.9.2007, 07:30 |
Везде Garbage Collection. |
| Автор: Dov 20.9.2007, 09:53 | ||||
Ok.
Стало быть, у тебя есть ф-ция, возвращающая int и, плюс к этому, указатель на неё. Я правильно понял? Тогда начнём сначала.
Что из этого тебе нужно? |
| Автор: bsa 20.9.2007, 10:35 | ||||
Имхо, в приведенном Dov коде есть ошибка. int (*xxx)() - это указатель по имени xxx на функцию возвращающую int, а не функция, возвращающая указатель. Лучше писать так:
|
| Автор: Dov 20.9.2007, 10:41 | ||
Никакой ошибки в моём коде нет. Добавлено через 4 минуты и 13 секунд а где у меня написано, что это функция? bsa, смотри внимательнее. |
| Автор: bsa 20.9.2007, 10:51 |
| Dov, согласен, я был не прав. |
| Автор: fear 20.9.2007, 10:58 | ||||||||||
| Dov, ты взрываешь мой мозг. Меня интерисовало, можно ли объявить указатель на функцию, результатом выполнения которой являлся бы указатель на аналогичную функцию? Т.е. функция возвращающая себе аналогичную фунцию. Для большего понимания вопроса был приведён пример объявления указателя на функцию, возвращающую int.
и пример желаемого результата
Надеюсь, я смог объяснить что требовалось. Решение содержит 4й пост. Если имеются мысли альтернативного решения, будет интересно взлянуть. Добавлено через 5 минут и 23 секунды
archimed7592, Подробней можешь ответить? |
| Автор: bsa 20.9.2007, 11:13 | ||
fear, лучше не заморачивайся и сделай возврат const void*, а при вызове делай преобразование типов. Как вариант, можно сделать через классы:
|
| Автор: Lazin 20.9.2007, 11:30 | ||
| Можно написать функтор возвращающий аналогичный функтор. Этот идиотский пример тому подтверждение:
|
| Автор: Dov 20.9.2007, 12:18 | ||||
В каком смысле?
Так я ж, вроде, это и написал. Ну, давай переделаем так, как ты хочешь, с typedef`ами.
fear, видишь указатель в main? Что это по-твоему, если не |
| Автор: fear 20.9.2007, 14:17 | ||||
Dov, попытаюсь объяснить по другому. Мне не нужен:
Мне нужен указатель на ф-цию, возвращающую указатель на аналогичную ф-цию. int - ненужен вообще, идея в том, что функция - это набор операций, в случае необходимости функция должна вернуть другую ф-цию (другой набор операций) или 0 - если других операций производить не надо Пример в догонку, класс A реализует выполнение цикла операций/действий содержащихся в произвольных функциях
|
| Автор: UnrealMan 20.9.2007, 14:21 | ||
И где тут объявление указателя с обозначенными требованиями? Ты всего лишь сделал reinterpret_cast. Поведение таких указателей можно разве что сымитировать
|
| Автор: fear 20.9.2007, 15:07 | ||||
Выше на один пост твоего, reinterpret_cast не знаю даже зачем использовал, исправил код, работает и без него UnrealMan, отличный пример, это мне и хотелось увидеть в самом начале, переделал его под свои нужды:
|
| Автор: UnrealMan 20.9.2007, 16:22 | ||
А, ну да, я тогда мельком посмотрел на этот код, и подумал, что вся фича в преобразовании типа. Сейчас же что-то вообще не понимаю, в чём там, собственно, прикол. |