• 《C++ Primer》学习 之 函数指针相关用法


    /*
      函数指针相关用法
    */

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #define HOME
     3 //#define NDEBUG
     4 #include <iostream>
     5 #include <stdexcept>
     6 #include <cassert>
     7 #include <ctype.h>
     8 #include <locale>
     9 #include <iterator>
    10 #include <cmath>
    11 #include <string>
    12 #include <vector>
    13 #include <initializer_list>
    14 #include <ctime>
    15 using namespace std;
    16 using ptrFun = int(*)(int, int);
    17 
    18 int myAdd(int x, int y)
    19 {
    20     return (x + y);
    21 }
    22 int mySub(int x, int y)
    23 {
    24     return (x - y);
    25 }
    26 
    27 int myMul(int x, int y)
    28 {
    29     return (x * y);
    30 }
    31 
    32 int myDiv(int x, int y)
    33 {
    34     if (0 == y)
    35     {
    36         std::cerr << "error : 除以0" << endl;
    37         return -1;
    38     }
    39     else
    40     {
    41         return (x / y);
    42     }
    43 }
    44 
    45 void Compute(int x, int y, int (*p)(int, int))
    46 {
    47     cout << p(x, y) << endl;
    48 }
    49 
    50 
    51 int main(int argc, char **argv)
    52 {
    53 #ifdef HOME
    54     //freopen("in", "r", stdin);
    55     //freopen("out", "w", stdout);
    56 #endif
    57 
    58     cout << "方法一:" << endl;
    59     // 以下两种声明方式也是可以的
    60     //vector<int(*)(int, int)> vecFunc;
    61     //vector<ptrFun> vecFunc;
    62     vector<decltype(myAdd)*> vecFunc;
    63     vecFunc.push_back(myAdd);
    64     vecFunc.push_back(mySub);
    65     vecFunc.push_back(myMul);
    66     vecFunc.push_back(myDiv);
    67     for (int i = 0; i < vecFunc.size(); ++i)
    68     {
    69         cout << vecFunc[i](6, 3) << endl;
    70         cout << (*vecFunc[i])(6, 3) << endl;
    71         Compute(6, 3, vecFunc[i]);
    72     }
    73 
    74     cout << endl << "方法二:" << endl;
    75     decltype(myAdd) *p1 = myAdd, *p2 = mySub, *p3 = myMul, *p4 = myDiv;
    76     vector<decltype(myAdd)*> vec1Func = { p1, p2, p3, p4 };
    77     for (int i = 0; i < vec1Func.size(); ++i)
    78     {
    79         cout << vec1Func[i](6, 3) << endl;
    80         cout << (*vec1Func[i])(6, 3) << endl;
    81         Compute(6, 3, vec1Func[i]);
    82     }
    83 
    84 #ifdef HOME
    85     std::cerr << "Time elapsed: " << clock() / CLOCKS_PER_SEC << " ms" << endl
    86         << "message: " << __FILE__ << endl
    87         << "        : in function " << __func__
    88         << " at line " << __LINE__ << endl
    89         << "          Compiled on " << __DATE__
    90         << " at " << __TIME__ << endl;
    91 #endif
    92     return 0;
    93 }
  • 相关阅读:
    一 基础--进制转化
    七牛云上传视频并截取第一帧为图片(js实现)
    FNScanner二维码接口openView自定义扫码Demo
    UIPickerView 模块示例demo
    vPlayer 模块Demo
    doT的高级用法及loadData的使用
    acmPush模块示例demo
    UIChatBox模块示例demo
    分享一款基于aui框架的图文发布界面
    基于js的APP多语言处理
  • 原文地址:https://www.cnblogs.com/shijianming/p/5311757.html
Copyright © 2020-2023  润新知