zoukankan      html  css  js  c++  java
  • C++编译期判断是否能够转型

    #include <iostream>
    #include <vector>
    using namespace std;
    
    template<class T,class U>
    class Conversion
    {
    private:
        typedef char Small;
        class Big{char dummy[2];};
        static Small test(U);
        static Big test(...);
        static T makeT();
    public:
        enum{ exists =
            sizeof(test(makeT()))==sizeof(Small) };
        enum{ exists2Way =
            exists && Conversion<U,T>::exists};
        enum{
            sameType=false};
    };
    
    template<class T>
    class Conversion<T,T>
    {
    public:
        enum{exists=1,exists2Way=1,sameType=1};
    };
    
    #define SUPERSUBCLASS(T,U)
        (Conversion<const U*,const T*>::exists && 
        !Conversion<const T*,const void*>::sameType)
    #define SUPERSUBCLASS_STRICT(T,U)
        (SUPERSUBCLASS(T,U) && 
        !Conversion<const T,const U>::sameType)
    class Shape
    {
    public:
        virtual void display()
        {
            cout<<"Shape"<<endl;
        }
    };
    
    class Circle:public Shape
    {
    public:
        virtual void display()
        {
            cout<<"Circle()"<<endl;
        }
    };
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        cout<<Conversion<double,int>::exists<<endl;
        cout<<SUPERSUBCLASS(Shape,Circle)<<endl;
        cout<<SUPERSUBCLASS_STRICT(Shape,Circle)<<endl;
        return 0;
    }
  • 相关阅读:
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    210 Course ScheduleII
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    206. Reverse Linked List
    sql 开发经验
  • 原文地址:https://www.cnblogs.com/wwblog/p/3681316.html
Copyright © 2011-2022 走看看