wheel: function&bind

#include <iostream>
#include <string>
#include <functional>  //function bind
#include <vector>
#include <algorithm>   //for_each
#include <iomanip>     //setw
#include <arpa/inet.h>

struct Points{
    double a,b;
    double multiply() { return a*b;}
};

struct Sum{
    int sum{0};
    void operator()(int n) { sum += n; }
    void setNum(int x)     { sum = x;  }
    void print()           { std::cout<<sum<<'\n'; }
};

bool isBigger(int x,int y)
{
    return x>y;
}

int check()
{
    union check{ int i; char ch; }c;
    printf("%p\n",&c.i);
    printf("%p\n",&c.ch);
    c.i =1;
    return (c.ch == 1);
}

int main()
{
    //std::function
    std::function<bool(int,int)> foo,lamda,bind;
    foo = isBigger;
    std::cout<<foo(10,9)<<'\n';

    lamda = [](int x,int y)->int{ return x>y;};
    std::cout<<lamda(10,9)<<'\n';

    foo = std::function<bool(int,int)>([](int x,int y){return x>y;});

    using namespace std::placeholders;
    bind = std::bind<bool>(isBigger,_2,_1);
    std::cout<<bind(10,9)<<'\n';

    //binding members
    Points pos = { 25.5,36.6 }; 
    
    auto BindStFn = std::bind(&Points::multiply,_1);
    std::cout<<BindStFn(pos)<<'\n';

    auto BindStData = std::bind(&Points::a,pos);
    std::cout<<BindStData()<<'\n';

    Points pos2 = { 60.1,33 };
    auto BindStData_1 = std::bind(&Points::a,_1);
    std::cout<<BindStData_1(pos2)<<'\n';    
    
    //std::for_each
    std::vector<int>nums{1,2,3,4,5};
    std::for_each(nums.cbegin(),nums.cend(),[](const int n){ std::cout<<std::setw(4)<<n;});
    
    std::cout<<'\n';
    std::for_each(nums.begin(),nums.end(),[](int& n){ n++;});

    Sum s = std::for_each(nums.cbegin(),nums.cend(),Sum());
    s.print();

    Sum* pSum = new Sum();
    auto bindSum = std::bind(&Sum::setNum,pSum,_1);
    bindSum(10);
    pSum->print();

    //----
    std::string PI = "3.1415926";
    
    unsigned char uc = std::stoi(PI,nullptr,10); 
    std::cout<<(int)uc<<'\n';

    
    //std::cout<<htons(0xffee);
    //char c1 = //htons(int_c);
    printf("int to uc:%d\r\n",uc);//换页键12 == c
    

    //---little or big
    int ret;
    ret = check();
    if(ret == 1) { printf("little\n"); }
     else         { printf("Big\n");    }
    
    //---
    int testInt = 1;
    unsigned char* pCC = (unsigned char*)&testInt;
    for(int i = 0; i < 4; i++)    printf("%p = %d\n",pCC+i,*(pCC+i));

    return 0;
}

2.

 

 

posted @ 2021-01-02 20:27  三岁玩童  阅读(42)  评论(0编辑  收藏  举报