через указатель на функцию
Код:
![Выделить весь код](images/misc/selectcode.png)
typedef int (*myfun_type)(int n)
int func1(myfun_type fun, int n)
{
return fun ? (*fun)(n) : 0;
}
виртуальную функцию
Код:
![Выделить весь код](images/misc/selectcode.png)
struct Listener {
virtual int fired(int n) = 0;
};
int func1(Listener* listener, int n)
{
return listener ? listener->fired(n) : 0;
}
вызов через шаблон
Код:
![Выделить весь код](images/misc/selectcode.png)
template<typename Fun> int func2(Fun fun, int arg)
{
return fun(arg);
}
// можно передавать класс с переопределённым operator()
// а можно указатель на функцию. В случае оператора шаблон может быть раскрыт inline