一.函数作为参数
1. 使用函数指针
void callFunction(void (*funcPtr)(int), int num) { }
2. 使用std::function
void callFunction(std::function<void(int)> func, int num) { }
使用时以函数名作为实参
二.函数对象
通过创建一个类并重载()来创建函数对象,主要用于STL容器和算法。相对于直接函数调用,函数对象有两个优势。 第一个是函数对象可包含状态。 第二个是函数对象是一个类型,因此可用作模板参数。
第二个模板函数是模板函数对象 less
。
template <class Key,
class Traits=less<Key>,
class Allocator=allocator<Key>>
class set
remove_if
的最后一个参数是返回布尔值(一个 谓词)的函数对象
template <class ForwardIterator, class Predicate>
ForwardIterator remove_if(
ForwardIterator first,
ForwardIterator last,
Predicate pred);
函数可以在某些情况下替换STL模板容器或算法中的函数对象作为参数。比如
bool UDgreater ( int elem1, int elem2 )
{
return elem1 > elem2;
}
sort( v1.begin( ), v1.end( ), UDgreater );