天下

记录修行的印记

[原创]一个C++异常的代替方案

#include "stdafx.h"

template <typename T>
class E
{
public:
    T val;
    int errcode;

    E(){}

    E(const T& val)
    {
        val = val;
    }

    operator T() const 
    {
        return val;
    }
    operator T*() 
    {
        return &val;
    } 
    E<T> operator=(const T& _val)
    {
        val = _val;
        return *this;
    }
public:
    int fail() const
    {
        return errcode;
    }

};


E<int> GetResult(bool fail)
{
    E<int> obj;
    obj.val = 0x1000;
    obj.errcode = fail;
    return obj;
}


int _tmain(int argc, _TCHAR* argv[])
{
    E<int> a;
    a.val = 5;
    a.errcode = false;

    int b = a;
    int* c = a;
    *c = 7;
    const int* d = a;

    unsigned int e = a = 8;

    E<int> x = GetResult(true);

    if (x.fail())
        printf("error \r\n");
    else
        printf("succeed \r\n");
    
    if (a.fail())
        printf("error \r\n");

    return 0;
}

posted on 2015-08-21 15:34 天下 阅读(139) 评论(0)  编辑 收藏 引用 所属分类: C++必杀技法C++模板


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2015年8月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

常用链接

留言簿(3)

随笔分类(369)

随笔档案(320)

链接

最新随笔

搜索

最新评论