• 包含的头文件

     #include <iostream>
    #include <string>
    #include <boost/array.hpp>
    //异构的容器
    #include <boost/any.hpp>
    #include <vector>
    #include <typeinfo>
    #include <algorithm>
    #include <boost/bind.hpp>
    #include <functional>
    #include <boost/variant.hpp>
    #include <boost/move/move.hpp>
    #include <boost/function.hpp>
    #include <boost/bind.hpp>
    #include <boost/lexical_cast.hpp>
    #include <boost/numeric/conversion/cast.hpp>
    #include <boost/cast.hpp>
    using namespace std;
    using namespace boost;
  • 函数包装器,包装仿函数,以及一个类包装另外一个类的函数
     int add(int a, int b)
    {
    cout << a + b << endl;
    return a + b;
    } //常规包装器
    void main1()
    {
    vector<int> myint = { ,,,, };
    //绑定操作
    //for_each(myint.begin(), myint.end(), bind(add, 10, _1)); //绑定lambda表达式,借助函数包装器
    boost::function<void(int,int)> fun = [](int a, int b)
    {
    cout << a + b << endl;
    };
    for_each(myint.begin(), myint.end(), bind(fun,,_1));
    cin.get();
    } //继承异构二元操作类
    class addit :public std::binary_function<int, int, void>
    {
    public:
    void operator()(int i, int j)
    {
    cout << i + j << endl;
    }
    }; //绑定仿函数
    void main2()
    {
    vector<int> myint = { ,,,, };
    //绑定仿函数
    for_each(myint.begin(), myint.end(), bind(addit(), , _1));
    cin.get();
    } void main3()
    {
    //myv可以是四种类型之一的任何一种类型
    typedef boost::variant<int, double, char, const char *> myv;
    std::vector<myv> s_values;
    s_values.push_back();
    s_values.push_back('X');
    s_values.push_back(10.9);
    s_values.push_back("hello");
    s_values.push_back('z');
    //根据数据类型来获取
    char ch = boost::get<char>(s_values.back());
    double db = boost::get<double>(s_values.at());
    cout << db << endl; cin.get();
    } //manager管理worker 类与类之间通信
    class manager
    {
    public:
    //函数指针
    boost::function<void(int)> workid;
    void setcallback(boost::function<void(int)> newworkid)
    {
    workid = newworkid;
    } void allgo()
    {
    for (int i = ; i < ; i++)
    {
    if (workid)
    {
    workid(i);
    }
    }
    }
    }; class worker
    {
    public:
    int id;
    void run(int toid)
    {
    id = toid;
    cout << id << "干活" << endl;
    }
    }; void main6()
    {
    manager m;
    worker w;
    //传递一个绑定的函数,调用者是w,需要一个参数
    m.setcallback(boost::bind(&worker::run, &w, _1));
    m.allgo();
    cin.get();
    }
     //function
    void main5()
    {
    boost::function<int(char *)>fun = atoi;
    cout << fun("") + fun("") << endl; fun = strlen;
    cout << fun("") << endl;
    cin.get();
    }
  • 左值转化为右值
     //右值引用
    void show(int &&data)
    {
    cout << data << endl;
    } void main4()
    {
    int a = ;
    //左值转化为右值
    show(std::move(a));
    show(boost::move(a));
    cin.get();
    }
  • 类型转换与类类型之间的转换,失败会异常
     //类型转换
    void main7()
    {
    int i = boost::lexical_cast<int>("");
    cout << i << endl;//转换失败则显示异常 char str[] = { '','','','','' };
    i = boost::lexical_cast<int>(str, );
    cout << i << endl; cin.get();
    } //转换成字符串类型
    void main8()
    {
    std::string str = boost::lexical_cast<std::string>("");
    cin.get();
    } void main9()
    {
    std::string str = boost::lexical_cast<std::string>("");
    //转换安全(转换失败会报异常)
    int num = boost::numeric_cast<int>("");
    cin.get();
    } class A
    { }; class B :public A
    { }; //类类型之间的转换
    void main()
    {
    B bobj;
    //转换失败会报异常
    boost::polymorphic_cast<A*>(&bobj);
    cin.get();
    }

9.variant move function change_cast的更多相关文章

  1. Character Controller (角色控制器) 中 Move()和SimpleMove() 的区别

    首先给出两者的圣典: CollisionFlagsMove(Vector3motion); Description A more complex move function taking absolu ...

  2. move.js 源码 学习笔记

    源码笔记: /* move.js * @author:flfwzgl https://github.com/flfwzgl * @copyright: MIT license * Sorrow.X - ...

  3. move.js运动插件

    move.js 运动插件是一款针对元素动画效果的插件.可以运用此插件制作出各类元素效果. 插件GitHub地址:https://github.com/visionmedia/move.js 下面整理学 ...

  4. coffeescript 1.8.0 documents

    CoffeeScript is a little language that compiles into JavaScript. Underneath that awkward Java-esque ...

  5. Add GUI to connect to SQL

    (*********************************************************************************) (* *) (* Below i ...

  6. 分享ES6中比较常用又强大的新特性

    前言 es6有很多新东西,但是感觉常用的并不是很多,这里学习记录了一些我自己认为非常常用又强大的新特性. scoping 实用的块级作用域,let x = xxx 可以声明一个块级作用域的局部变量,简 ...

  7. Delphi的程序单元、结构、基础知识(转)

    Object Passal的程序结构很特殊,与其它语言如C++,Object Windows等结构都不同.一个Delphi程序由多个称为单元的源代码模块组成.使用单元可以把一个大型程序分成多个逻辑相关 ...

  8. how to use coffee script

    TABLE OF CONTENTS TRY COFFEESCRIPT ANNOTATED SOURCE CoffeeScript is a little language that compiles ...

  9. wxpython wx.windows的API

    wx.Window is the base class for all windows and represents any visible object on screen. All control ...

随机推荐

  1. caioj1497&&bzoj3125: CITY

    震惊!bzoj居然又被苏大佬D飞了... 这题煞笔模板题好吧. 然而bzojAC caiojWA%40??? 好强啊 今天早上发现是m打成n了囧 #include<cstdio> #inc ...

  2. Navicat Premium 12 模型导出sql

    找了半天,终于找到导出sql了!

  3. Extjs Grid 各种Demo

    grid的一个渲染效果 Ext.define('cfWeb.view.accountSetting.OrgManageView',{ alias : 'widget.orgManageView', e ...

  4. k8s 架构浅析

    文章目录 目录 Kubernetes 的电梯间演讲 Kubernetes 的核心层级对象 Kubernetes 的组件架构 Kubernetes 的组件通信协议/接口 Kubernetes 的分层架构 ...

  5. 双系统下Ubuntu安装教程

    一.下载Ubuntu镜像包 二.用老毛桃制作U盘启动盘 三.下载Universal USB Installer 下载后无需安装,直接运行Universal USB Installer, step1: ...

  6. JavaScript系列--浅析原型链与继承

    一.前言 继承是面向对象(OOP)语言中的一个最为人津津乐道的概念.许多面对对象(OOP)语言都支持两种继承方式::接口继承 和 实现继承 . 接口继承只继承方法签名,而实现继承则继承实际的方法.由于 ...

  7. Ubuntu14.0 + CUDA9.0 + cudnn7.0 + TensorFlow-gpu1.7.0

    在安装好nvidia驱动的基础上安装 CUDA9.0 + cudnn7.0 + TensorFlow-gpu1.7.0 这三个是匹配的版本 别的匹配(CUDA8.0 + cudnn6.0 + Tens ...

  8. 关于read函数的一些分析

    ssize_t readn(int fd, std::string &inBuffer, bool &zero) { ssize_t nread = ; ssize_t readSum ...

  9. [spoj] HIGH - Highways (生成树计数)

    传送门 输入格式: 第一行一个整数T,表示测试数据的个数 每个测试数据第一行给出 n,m 分别表示点数与边数 接下来 m 行,每行给出两个数 a,b ,表示 a,b 之间有一条无向边 输出格式: 每个 ...

  10. [读书笔记] R语言实战 (十四) 主成分和因子分析

    主成分分析和探索性因子分析是用来探索和简化多变量复杂关系的常用方法,能解决信息过度复杂的多变量数据问题. 主成分分析PCA:一种数据降维技巧,将大量相关变量转化为一组很少的不相关变量,这些无关变量称为 ...