zoukankan      html  css  js  c++  java
  • C++ is_same

    is_same

    template< class T, class U >
    struct is_same;
    

    如果T与U具有同一const-volatile限定的相同类型,则is_same<T,U>::value为true,否则为false。

    使用示例

    #include<iostream>
    #include<type_traits>
    using namespace std;
    int main()
    {
        cout<<boolalpha;
        cout<<is_same<int,int>::value<<endl;
        cout<<is_same<int,double>::value<<endl;
    }
    

    输出为

    true
    false
    

    可能的实现

    template<class T, class U> //0
    struct is_same : std::false_type {};
     
    template<class T> //1
    struct is_same<T, T> : std::true_type {};
    

    首先定义了一个类模板is_same,这个类模板有两个模板参数T和U。接着针对这个类模板T和U类型相同的情况进行偏特化。所以,当T和U为同一种类型时,将匹配到1,不同则匹配到0。两个版本唯一的不同是父类。

    父类的定义:

    using true_type=std::integral_constant<bool, true>
    using false_type=std::integral_constant<bool, false>
    

    可见true_typefalse_type是类模板std::integral_constant实例化的结果。

    std::integral_constant可能的定义:

    template<class T, T v>
    struct integral_constant {
        static constexpr T value = v;
        typedef T value_type;
        typedef integral_constant type; // 使用注入的类名
        constexpr operator value_type() const noexcept { return value; }
        constexpr value_type operator()() const noexcept { return value; } // c++14 起
    };
    

    由代码可见,std::integral_constant包装了特定类型T的静态常量,且值为v。

    所以true_typefalse_type为包含一个静态bool成员的类。值分别为true和false。

    再以上面的代码为例

    当T,U都为int时,匹配到1,此时is_same类继承了true_type,该类包含一个静态bool对象value=true。
    当T,U分别为int,double时,is_same类继承了false_type,该类同true_type只不过value=false。

    参考

    http://zh.cppreference.com/w/cpp/types/is_same

  • 相关阅读:
    day19 反射
    Oracle函数整理
    在博客园设置访问人数
    数据库中行转列
    Oracle中数据库与实例的区别
    sql语句的执行顺序
    【地址】ps_cs6安装
    ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
    人员管理模块密码过期
    相关性配置模块总结
  • 原文地址:https://www.cnblogs.com/cknightx/p/7642217.html
Copyright © 2011-2022 走看看