zoukankan      html  css  js  c++  java
  • unary_function和binary_function详解

    1.unary_function和binary_function介绍

    1.1 unary_function介绍

      unary_function可以作为一个一元函数对象基类,它只定义参数返回值的类型,本身并不重载()操作符,这个任务应该交由派生类去完成。

    1.2 unary_function源码

    1 template <class Arg, class Result>
    2   struct unary_function {
    3     typedef Arg argument_type;
    4     typedef Result result_type;
    5   };
    成员类型定义注释
    argument_type 第一个模板参数 (Arg) ()重载函数的参数类型
    result_type 第二个模板参数(Result) ()重载函数的返回值类型

    1.3 例子

     1 // unary_function example
     2 #include <iostream>     // std::cout, std::cin
     3 #include <functional>   // std::unary_function
     4 
     5 struct IsOdd : public std::unary_function<int,bool> {
     6   bool operator() (int number) {return (number%2!=0);}
     7 };
     8 
     9 int main () {
    10   IsOdd IsOdd_object;
    11   IsOdd::argument_type input;
    12   IsOdd::result_type result;
    13 
    14   std::cout << "Please enter a number: ";
    15   std::cin >> input;
    16 
    17   result = IsOdd_object (input);
    18 
    19   std::cout << "Number " << input << " is " << (result?"odd":"even") << ".
    ";
    20 
    21   return 0;
    22 }
    View Code

     2. binary_function介绍

    2.1 binary_function介绍

      binary_function可以作为一个元函数对象基类,它只定义参数返回值的类型,本身并不重载()操作符,这个任务应该交由派生类去完成。

    2.2 binary_function源码

    1 template <class Arg1, class Arg2, class Result>
    2   struct binary_function {
    3     typedef Arg1 first_argument_type;
    4     typedef Arg2 second_argument_type;
    5     typedef Result result_type;
    6   };
    成员类型定义注释
    first_argument_type 第一个模板参数(Arg1) ()重载函数的第一个参数类型
    second_argument_type 第一个模板参数 (Arg2) ()重载函数的第二个参数类型
    return_type 第一个模板参数(Result) ()重载函数的返回值类型

    2.3 例子

     1 // binary_function example
     2 #include <iostream>     // std::cout, std::cin
     3 #include <functional>   // std::binary_function
     4 
     5 struct Compare : public std::binary_function<int,int,bool> {
     6   bool operator() (int a, int b) {return (a==b);}
     7 };
     8 
     9 int main () {
    10   Compare Compare_object;
    11   Compare::first_argument_type input1;
    12   Compare::second_argument_type input2;
    13   Compare::result_type result;
    14 
    15   std::cout << "Please enter first number: ";
    16   std::cin >> input1;
    17   std::cout << "Please enter second number: ";
    18   std::cin >> input2;
    19 
    20   result = Compare_object (input1,input2);
    21 
    22   std::cout << "Numbers " << input1 << " and " << input2;
    23   if (result)
    24       std::cout << " are equal.
    ";
    25   else
    26       std::cout << " are not equal.
    ";
    27 
    28   return 0;
    29 }
    View Code
  • 相关阅读:
    微信小程序实现课程表实例
    探索Java中的网络编程技术
    Java中的Spring MVC简介笔记
    我没有想赢,我只是不想输
    下次路过,人间再无我。
    从零基础入门MySQL数据库基础课
    vue.js-详解三大流行框架VUE_快速进阶前端大咖-Vue基础
    学习网站/实用工具,收藏的快搜网站,想找什么都有!!!
    【灵魂拷问】你真的懂得Mysql的管理和使用吗?
    【领会要领】web前端-轻量级框架应用(jQuery基础)
  • 原文地址:https://www.cnblogs.com/blueoverflow/p/4738964.html
Copyright © 2011-2022 走看看