c++仿照go语言的error,函数返回值封装

c++仿照go语言,程序返回错误时,可以附加错误信息

#ifndef __ERRORMSG_H_
#define __ERRORMSG_H_
#include
struct Errormsg
{
    typedef enum
    {
        OK = 0,
        ERR = 1,
    } HerrorCode;
    HerrorCode code = OK;
    std::string desc = "";
    int line;
    std::string file;
    Errormsg() {}
    Errormsg(HerrorCode c)
    {
        code = c;
    }
    Errormsg(HerrorCode c, const char *d)
    {
        code = c;
        desc = d;
    }
    Errormsg(HerrorCode c, std::string d)
    {
        code = c;
        desc = d;
    }
    Errormsg(HerrorCode c, std::string d, const char *_file, int _line)
    {
        code = c;
        file = _file;
        line = _line;
        desc = d;
    }
    std::string flDesc()
    {
        return std::string("[") + file + "#" + std::to_string(line) + "]" + desc;
    }
    ~Errormsg() {}
    bool isOk() { return code == OK; }
};

#define ERRORSMSG_OK Errormsg(Errormsg::ERR, "ok")
#define ERRORSMSG_ERR(str) Errormsg(Errormsg::ERR, str)
#define ERRORSMSG_ERR_FL(str) Errormsg(Errormsg::ERR, str, __FILE__, __LINE__)

#endif

使用示例:

int main(int argc, char const *argv[])
{
    Errormsg e = ERRORSMSG_OK;
    printf("msg, %s\n", e.desc.c_str());

    e = ERRORSMSG_ERR("run err");
    printf("msg, %s\n", e.desc.c_str());

    e = ERRORSMSG_ERR_FL("run err msg");
    if (e.isOk()){
        printf("run ok\n");
    }
    else{
        printf("run err, file:%s, line:%d, msg: %s\n", e.file.c_str(), e.line, e.desc.c_str());
        printf("run err, %s\n", e.flDesc().c_str());
    }
    return 0;
}

输出结果

msg, ok
msg, run err
run err, file:a.cpp, line:59, msg: run err msg
run err, [a.cpp#59]run err msg

更多内容查看我的专栏 ,或个人主页

更多编程资料见公众号 xutopia77

c++仿照go语言的error,函数返回值封装

Original: https://www.cnblogs.com/xutopia/p/15820422.html
Author: xutopia
Title: c++仿照go语言的error,函数返回值封装

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611218/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • shell之常用的一些命令

    前言 自我感觉学习shell要常用man,–help这样挺方便去写的,光靠熟练远远不够的 bash;gutter:false;</p> <h1>!/bin…

    Linux 2023年6月8日
    094
  • 【Redis】缓存穿透、缓存击穿、缓存雪崩产生原因及解决方案

    一. 本文对Redis中[缓存穿透]、[缓存击穿]、[缓存雪崩]三种现象产生原因、解决方法进行说明 二. 缓存穿透 1. 原因 2. 解决方法 三. 缓存击穿 1. 原因 2. 解…

    Linux 2023年5月28日
    0108
  • Java类初始化顺序小结

    第一种情况(单一类) 测试结果 &#x9759;&#x6001;&#x53D8;&#x91CF; &#x9759;&#x6001;&…

    Linux 2023年6月7日
    0106
  • 分布式系统架构理论与组件

    1.分布式系统的发展 在计算机发展的早期,一直都是集中式计算,计算能力依赖大型计算机。随着互联网的发展,繁重的业务需要巨大的计算能力才能完成,而集中式计算无法满足要求,大型计算机的…

    Linux 2023年6月6日
    0109
  • win11下关于安装umi成功后CMD命令不能使用的问题

    先找到你安装的umi全局路径 yarn global bin 然后把这个路径添加到系统变量中去:PATH 还是不能用的话就是找到 umi.cmd 文件的目录,把里面的C盘符号前面的…

    Linux 2023年6月14日
    0116
  • Tomcat性能优化方案

    你使用过tomcat的话,简单的说就是”内存溢出”. 通常情况下,这种问题出现在实际的生产环境中.产生这种问题的原因是tomcat使用较少的内存给进程,通过…

    Linux 2023年6月14日
    0111
  • SQL查询语句–统计

    — 1、日统计查询填补 i->为时间差的天数 2022-05-10为终止时间 SET @i :=- 1; SELECT date_format( DATE_SUB( ’20…

    Linux 2023年6月14日
    085
  • VMware ESXi 7.0 U2 SLIC 2.6 & Unlocker 集成 Intel NUC 网卡、USB 网卡和 NVMe 驱动

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    Linux 2023年5月27日
    088
  • ansible对文件内容操作

    bash;gutter:true; ansible lineinfile 简介 lineinfile该模块是操作文件中的每一行内容,他是按照行为单位的,和下面的replace模块并…

    Linux 2023年6月7日
    078
  • dotnet诊断工具记录

    CPU爆高(cpu陡增,比如正常运行一般是x%的cpu,突然到了20% 30%甚至更高) 调试高 CPU 使用率 dotnet tool install –global dotn…

    Linux 2023年6月7日
    0102
  • U盘如何安装centos7系统?U盘安装centos7详细安装图解教程

    一般来说,无论是Windows还是linux的IOS系统镜像,我们都可以使用UltraIOS(软碟通)这款软件制作U盘启动工具,不过考虑到不少小白依然不会如何操作,所以今天考虑写一…

    Linux 2023年6月8日
    0107
  • 数据分析业务知识

    1.电商和消费模型 所谓的电商和消费模型是以商品的交易、零售、购买搭建而起。包括客单价、复购率、回购率、退货率、购物篮大小、进销存等商品概念。 2.市场营销模型 市场营销模型是以传…

    Linux 2023年6月6日
    0124
  • muduo源码分析之Buffer

    这一次我们来分析下 muduo中 Buffer的作用,我们知道,当我们客户端向服务器发送数据时候,服务器就会读取我们发送的数据,然后进行一系列处理,然后再发送到其他地方,在这里我们…

    Linux 2023年6月13日
    095
  • 【Example】C++ 标准库多线程同步及数据共享 (std::future 与 std::promise)

    否则你会像听天书一样懵。(…) ==================================== 在任何语言的多线程编程当中,必然涉及线程的同步及数据的共享,方…

    Linux 2023年6月13日
    0116
  • K8S部署之VMWare网络拓扑踩坑

    知乎上最近发现一篇好文 图解K8S(01):基于Ubuntu 20.04部署1.23版K8S集群,想着之前 K8S 部署一直不成功,那么就照着这篇文章中说的试一试。结果在实验时遇到…

    Linux 2023年5月27日
    093
  • python异常处理

    关于异常 在程序运行中,总会遇到各种各样的错误,如打开一个不存在的文件,程序期待用户输入数字,但用户输入了字符串,网络传输终止等,如果不对这些可能引发异常的情况进行处理,就会导致抛…

    Linux 2023年6月7日
    0162
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球