• c++11::std::is_same/decay


    #include <type_traits>
    std::is_same 判断类型是否一致
    通过std::is_same即可判断两个类型是否一样,特别在模板里面,在不清楚模板的参数时,此功能可以对一些特定的参数类型进行特殊的处理。
    
    std::is_same可以判断两种类似是否一样,那么用在模板里就是利器了,本位一开始提到的那个问题就可以这样写:
    #include <iostream>
    template<typename TYPE>
    typeCheck(TYPE data)
    {
        if(std::is_same<TYPE,int>::value)
        {
            std::cout<<"int type";
            //do something int 
        }
        else
        {
            //.........
        }
    }
    std::is_same的判断是很严格的!
    typedef int integer_type;
    struct A { int x, y; };
    struct B { int x, y; };
    typedef A C;
    
    int main() {
        std::cout << std::boolalpha;
        std::cout << "is_same:" << std::endl;
    
        std::cout << "int, const int: " << std::is_same<int, const int>::value << std::endl;//false
        std::cout << "int, int&: " << std::is_same<int, int&>::value << std::endl;//false
    
        std::cout << "int, const int&: " << std::is_same<int, const int&>::value << std::endl;//false
        std::cout << "int, integer_type: " << std::is_same<int, integer_type>::value << std::endl;//true
    
        std::cout << "A, B: " << std::is_same<A, B>::value << std::endl;//false
        std::cout << "A, C: " << std::is_same<A, C>::value << std::endl;//true
    
        std::cout << "signed char, std::int8_t: " << std::is_same<signed char, std::int8_t>::value << std::endl;//true
        system("pause");
    }
    std::decay 退化类型的修饰。
    各种引用的修饰去掉,把cosnt int&退化为int,这样就能通过std::is_same正确识别出加了引用的类型了 
    #include <iostream>
    #include <type_traits>
    
    template <typename T, typename U>
    struct decay_equiv : 
        std::is_same<typename std::decay<T>::type, U>::type 
    {};
    
    int main()
    {
        std::cout << std::boolalpha
                << decay_equiv<int, int>::value << '
    '         //true
                << decay_equiv<int&, int>::value << '
    '        //true
                << decay_equiv<int&&, int>::value << '
    '        //true
                << decay_equiv<const int&, int>::value << '
    '    //true
                << decay_equiv<int[2], int*>::value << '
    '        //true
                << decay_equiv<int(int), int(*)(int)>::value << '
    ';    //true
    }
  • 相关阅读:
    Python测试框架:pytest
    用Python unittest搭建自动化测试框架
    unittest单元测试框架
    golang获取本地dns服务器
    Go语言HTTP请求头小写问题
    MAC上使用nginx搭建直播服务器
    go packages 学习
    Cloud Native Computing Foundation
    普通文件I/O需要两次复制,内存映射文件mmap一次复制
    page cache & buffer cache
  • 原文地址:https://www.cnblogs.com/osbreak/p/11077604.html
Copyright © 2020-2023  润新知