/*****************************************************************************
* aurhor: StefanChen
* date: 20170121
* brief: C++ api 一元函数、二元函数
******************************************************************************/
一 unary_function一元函数使用
原型:
template <class Arg, class Result> struct unary_function; template <class Arg, class Result> // 1个参数,一个返回值 struct unary_function { typedef Arg argument_type; typedef Result result_type; };
在C++98版本中,这个使用的很频繁,后来在C++11中就少见,在官网网站上看被注明是过时的。但是不能就这么否定它的存在,高效的使用,可以为程 序添彩不少。
这是一个标准的一元函数对象基类,一般的函数对象是类成员operator()被定义 的实例,这个成员函数允许对象被用于作为正则函数相同语法调用,因此当使用泛型函数类型时,它的类型作为模板参数。
作为一元函数对象,operator() 成员函数带一个简单参数。
unary_function 仅仅是一个基类,特殊的函数对象会继承于它。它自身没有operator() 成员函数。
头文件:
#include <functional> // std::unary_function
简单写一个判断是否为负数的例子:
struct TJudegNagetive: public std::unary_function(int,bool){
bool operator(int num){
return num < 0;
}
}
int main(){
TJudegNagetive oJudeNagetive;
bool isNagetive = oJudeNagetive(1);
std::cout<<" 是负数 ?:"<<isNagetive<<endl;
return 0;
}
二 binary_function二元函数使用
原型:
template <class Arg1, class Arg2, class Result> struct binary_function; template <class Arg1, class Arg2, class Result> struct binary_function { typedef Arg1 first_argument_type; typedef Arg2 second_argument_type; typedef Result result_type; };
这是一个标准的二元函数对象基类,一般的函数对象是类成员operator()被定义 的实例,这个成员函数允许对象被用于作为正则函数相同语法调用,因此当使用泛型函数类型时,它的类型作为模板参数。作为二元函数对象,operator() 成员函数带两个简单参数。binary_function仅仅是一个基类,特殊的函数对象会继承于它。它自身没有operator() 成员函数。头文件:#include <functional> // std::unary_function举个栗子:比较大小值,返回最大数:struct TCompareNumSize: public std::unary_function(int,int,int){ int operator(int num1, int num2){ return num1< num2 ? num2:num1; } } int main(){ TCompareNumSize oCompareSize; int iMaxNum = oCompareSize(1,2); std::cout<<" 最大数是:"<<iMaxNum<<endl; return 0; }
三 结论
binary_function与unary_function使用类似,只是参数不同,通过继承基类,重写operator即可实现我们想要的 效果,这两个api,其实我们自定义自己的数据结构基类,定义纯虚函数或虚函数,子类重写一样可以达到效果,为了图方便。 你也可以包含C++的头文件去使用。