Показать полную графическую версию : Как передать функцию в качестве аргумента другой функции?
crashtuak
05-04-2010, 20:24
Как передать функцию в качестве аргумента другой функции? Домустим, у нас есть функция func1(int numb), и есть функция func2, и в качестве аргумента func2 надо передать func1. Внутри func2 мы знаем список аргументов func1 и вызываем внутри func2, для примера, func1(10). Можно ли так сделать?
Аргумент - некоторое значение. Функция возвращает некторое значение, следовательно:
//код
func2(func1(10));
//код
-если я Вас правильно понял.
через указатель на функцию
typedef int (*myfun_type)(int n)
int func1(myfun_type fun, int n)
{
return fun ? (*fun)(n) : 0;
}
виртуальную функцию
struct Listener {
virtual int fired(int n) = 0;
};
int func1(Listener* listener, int n)
{
return listener ? listener->fired(n) : 0;
}
вызов через шаблон
template<typename Fun> int func2(Fun fun, int arg)
{
return fun(arg);
}
// можно передавать класс с переопределённым operator()
// а можно указатель на функцию. В случае оператора шаблон может быть раскрыт inline
EvgeniyQQQ
06-04-2010, 10:46
Можно ещё, для понимания, почитать про обратный вызов функции.
Например тут (http://ru.wikipedia.org/wiki/Callback_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0% B8%D0%B5%29).
anastasiya.kurinko@fb
15-09-2012, 21:45
Можно посмотреть еще несколько примеров реализации передачи функции в качестве параметра (http://hashcode.ru/questions/128511/c-как-в-с-передать-функцию-в-качестве-параметра)
Tonny_Bennet
17-09-2012, 09:45
anastasiya.kurinko@fb, ссылка некликабельна т.е. неработоспособна
Delirium
17-09-2012, 12:51
Правильная ссылка - http://hashcode.ru/questions/128511
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.