编译期间侦测可转换性

简介:

template <class T,class U>
class Conversion
{
    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)};
};

int _tmain(int argc, _TCHAR* argv[])
{
    using namespace std;

    cout<< Conversion<double,int>::exists << ' ';
    
    getchar();

    return 0;
}

 

sizeof 并不会真有任何表达式被求值。

====================================

template <class T,class U>
class Conversion
{
    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 = false};
};

class A
{
    int a;
};

class B :public A
{
    int a;
};

#define  SUPERSUBCLASS(T,U) \
    (Conversion<const U*,const T*>::exists && \
    !Conversion<const T*,void *>::sameType)

int _tmain(int argc, _TCHAR* argv[])
{
    using namespace std;

    cout<< Conversion<double,int>::exists << ' ';

    if( SUPERSUBCLASS(A,B) )
    {
        cout<< "SUPERSUBCLASS<A,B>,A is base class" << ' ';
    }
    
    getchar();

    return 0;
}

 


本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/p/3940374.html,如需转载请自行联系原作者

相关文章
|
Serverless
函数计算在执行请求的过程中遇到了意外的错误
函数计算在执行请求的过程中遇到了意外的错误
96 1
|
4月前
|
存储 人工智能 运维
函数计算产品使用问题之怎么识别并清理文件中转站中的无用文件
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
7月前
|
存储 编解码 Windows
LabVIEW程序代码更新缓慢
LabVIEW程序代码更新缓慢
79 1
|
7月前
|
C语言
文件读写过程中的出错检测
文件读写过程中的出错检测
56 0
|
7月前
|
数据挖掘
dlookr包,自动输出一份数据诊断报告
dlookr包,自动输出一份数据诊断报告
250 0
|
Java 编译器
即时编译的触发
即时编译的触发
|
编译器 Linux C++
程序运行环境和预处理(二)
程序运行环境和预处理
71 0
|
存储 程序员
程序运行环境和预处理(一)
程序运行环境和预处理
84 0
|
缓存 小程序 API
小程序:浅谈小程序更新机制,发版后多久能全覆盖
小程序:浅谈小程序更新机制,发版后多久能全覆盖
440 0
|
安全 API Android开发
教你如何高效的检查APK中使用敏感权限的地方以及检查某系统方法被调用的地方
教你如何高效的检查APK中使用敏感权限的地方以及检查某系统方法被调用的地方
555 0
教你如何高效的检查APK中使用敏感权限的地方以及检查某系统方法被调用的地方