• 包含的头文件

     #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. 踩坑 Windows 解决pip install出现“由于目标计算机积极拒绝,无法连接”的问题

    解决pip install出现“由于目标计算机积极拒绝,无法连接”的问题   可能是使用某软件自动设置了代理, 所以需要手动的取消代理才可以.   在Intel选项中把所有的代理都给去掉就可以了... ...

  2. checkbox改写

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 子线程中刷新了UI

    This application is modifying the autolayout engine from a background thread, which can lead to engi ...

  4. Xcode的一些控制台命令

    命令 解释 break NUM 在指定的行上设置断点 bt 显示所有的调用栈帧,该命令可用来显示函数的调用顺序 clear 删除设置在特定源文件.特定行上的断点,其用法为:clear FILENAME ...

  5. MyEclipse 安装svn 插件步骤详情

    方法一:在线安装 打开HELP- > MyEclipse Configuration Center.切换到SoftWare标签页. 点击Add Site 打开对话框,在对话框Name输入Svn, ...

  6. VC工程里,如何编译汇编语言的文件

    最近老是有朋友问,VC工程里,如何编译汇编语言的文件,接下来就说一下步骤: 1.将汇编语言文件,加入到工程里: 2.在Solution Explorer窗口中右键单击Visual C++项目,选择Bu ...

  7. HTMLWEST网页特效大全

    网页特效大全网:www.htmlwest.com 收藏一下,很不错的站.

  8. ZBrush中的实时遮罩

    在ZBrush®中有许多遮罩类型,包括柔滑遮罩.反转遮罩,实时遮罩等.其中,实时遮罩又包含很多种类,它不同于一般的遮罩是不显示的,实时遮罩是根据实时信息产生新的遮罩. 在“Brush”菜单下“Auto ...

  9. Kattis - ACM Contest Scoring

    ACM Contest Scoring Our new contest submission system keeps a chronological log of all submissions m ...

  10. idea--IntelliJ IDEA隐藏不想看到的文件或文件夹

    打开IntelliJ IDEA,File -> Settings -> Editor -> File Types 在红框部分加上你想过滤的文件或文件夹名