• c++相关的类型推导


    c++11和boost库增加许多关于类型推导(编译期)的关键字和类型, 用好这些机制, 对于编写项目的一些组件帮助颇大。正所谓工欲善其事,必先利其器。

    1、初始化某种类型的变量

    auto var = expression;

    2、推导表达式类型

    decltype(expression) var;

    decltype很重要的一个用途就是配合auto使用, 推导函数的返回值。

    template<class U, class V>  
    auto Multiply(U u, V v) -> decltype(u*v)    // Note -> after the function bracet.  
    {   
          return u*v;  
    }

    需要注意的是, decltype不会执行表达式而auto会。

    3、推导一个调用表达式的返回类型

    result_of是boost库中的一个小组件, 使用的时候需要

    #include <boost/utility/result_of.hpp>

    附带说一下, c++对于RTTI(Run Time Type Identification)的支持, 提供了两个操作符:dynamic_cast和typeid,一个类型:type_info。

    msdn对于typeid的说明:

    typeid操作符的返回结果是名为type_info的标准库类型的对象的引用。 type_info在typeinfo头文件中定义:

    class type_info {
    public:
      virtual ~type_info();
      bool operator== (const type_info& rhs) const;
      bool operator!= (const type_info& rhs) const;
      bool before (const type_info& rhs) const;
      const char* name() const;
    private:
      type_info (const type_info& rhs);
      type_info& operator= (const type_info& rhs);
    };

    dynamic_cast作用:将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理,
           即会作一定的判断。
           对指针进行dynamic_cast,失败返回null,成功返回正常cast后的对象指针;
           对引用进行dynamic_cast,失败抛出一个异常,成功返回正常cast后的对象引用。 注意:dynamic_cast在将父类cast到子类时,父类必须要有虚函数。
    dynamic_cast会用到RTTI技术,因此需要启动“运行时类型信息”这一选项
  • 相关阅读:
    全文搜索 Contains 与like 的区别
    Easyui _treegrid 动态加载子节点
    十五、ES开启SSL访问
    十二、ES分词器
    十一、ES监控
    十六、源码部署EFK之快乐没有了
    十四、ES开启密码认证
    十三、ES备份恢复
    十七、优化ES
    正则表达式
  • 原文地址:https://www.cnblogs.com/zilongblog/p/4041624.html
Copyright © 2020-2023  润新知