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