Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Как передать функцию в качестве аргумента другой функции? (http://forum.oszone.net/showthread.php?t=172299)

crashtuak 05-04-2010 20:24 1385635

Как передать функцию в качестве аргумента другой функции?
 
Как передать функцию в качестве аргумента другой функции? Домустим, у нас есть функция func1(int numb), и есть функция func2, и в качестве аргумента func2 надо передать func1. Внутри func2 мы знаем список аргументов func1 и вызываем внутри func2, для примера, func1(10). Можно ли так сделать?

AlexTNT 05-04-2010 20:39 1385652

Аргумент - некоторое значение. Функция возвращает некторое значение, следовательно:
Код:

//код
func2(func1(10));
//код

-если я Вас правильно понял.

pva 05-04-2010 21:25 1385685

через указатель на функцию
Код:

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 1385931

Можно ещё, для понимания, почитать про обратный вызов функции.
Например тут.

anastasiya.kurinko@fb 15-09-2012 21:45 1989291

Можно посмотреть еще несколько примеров реализации передачи функции в качестве параметра

Tonny_Bennet 17-09-2012 09:45 1990121

anastasiya.kurinko@fb, ссылка некликабельна т.е. неработоспособна

Delirium 17-09-2012 12:51 1990216

Правильная ссылка - http://hashcode.ru/questions/128511


Время: 22:15.

Время: 22:15.
© OSzone.net 2001-