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;
    }
  • 相关阅读:
    100-days: twelve
    100-days: eleven
    100-days: ten
    [PKUWC 2018]随机算法
    [CTSC 2018]假面
    APIO 2018 游记
    CTSC 2018 游记
    [CQOI 2018]解锁屏幕
    [CQOI 2018]九连环
    [CQOI 2018]破解D-H协议
  • 原文地址:https://www.cnblogs.com/wwblog/p/3681316.html
Copyright © 2011-2022 走看看