一 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++的头文件去使用。