![]() |
|
Модераторы: bsa |
![]()
|
|
| Mormishka |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
Как сделать так, чтобы в функцию можно было передать функции с разными аргументами, т.е.
есть функция
Т.е. можно написать x=fun(f) Это будет работать, например у меня есть другая функция
Что нужно сделать чтоб работало x=fun(f2) ? |
||||||
|
|||||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
Это сообщение отредактировал(а) baldina - 31.1.2011, 14:04 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
|
|||
|
||||
| Mormishka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
Понял. Переформулирую вопрос. Можно ли делать функции с параметрами по выбору? |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
нет. потому что нет случая, когда это нужно. в случаях, когда кажется, что это нужно, есть более изящные и выразительные способы достичь нужного результата. если приведешь пример, для чего это потребовалось, покажем, как лучше сделать (и объясним почему оно лучше) |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
перегрузить для каждой комбинации.. (если С++, а не С) Добавлено через 5 минут и 19 секунд может :
? Это сообщение отредактировал(а) mes - 31.1.2011, 22:32 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Что значит "по выбору"? Хочешь задаешь X, хочешь Y, а хочешь оба? С++ есть возможность использовать параметры со значениями по умолчанию. Такое применяется, когда ряд параметров функции редко когда отличен от определенного значения. В С/С++ есть возможность делать функции с переменным числом параметров. Пример такой функции - printf. Но это очень небезопасно, поэтому пользоваться этим крайне не рекомендуется. |
|||
|
||||
| halfnode |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.1.2011 Репутация: нет Всего: нет |
Если я правильно понял автора топа, то mes крайне прав.
создается два прототипа функции f()
Потом, пишешь 2 реализации функции:
После всего этого, когда ты будешь вызывать функцию f, она будет смотреть на кол-во принимаемых параметров. Если параметр один, то исполнится функция f(int), если параметров будет два, то f (int,int) Называется перегрузка функций. В С++ правда только. Это сообщение отредактировал(а) halfnode - 1.2.2011, 16:43 |
||||
|
|||||
| Mormishka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
Да, но можно ли написать вот так?
|
|||
|
||||
| halfnode |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.1.2011 Репутация: нет Всего: нет |
Я не знаток...далеко не знаток, но:
Возможно так было бы корректнее:
|
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Написать можно, но не скомпилируется. Так как компилятор не знает ни конструкции "(pf*)", ни "result f(1)".
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
главное понять что есть на входе, и что должно быть на выходе.. если задачу можно сформулировать и представить, значит ее можно решить.. возможно, то что нужно, легко получается с помощью function и bind... но учитывая Ваше продолжительное настаивание на result, говорит о том, что Вам пока рано подходить к решению подобных вопросов.. для начала бы не мешало бы подучить основы программирования.. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |