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)

大家都在看

  • Ubuntu20.04 命令行 修改系统IP地址

    Ubuntu 修改IP地址(静态IP) 配置文件修改 — 命令行修改 ifconfig的安装及使用,ip 命令的使用 0. 前言 1. 修改配置文件 1.1 输入(修改…

    Linux 2023年6月6日
    0170
  • Redis功能拓展-消息队列

    1.什么是消息队列,消息队列解决什么问题?从宏观上看,消息队列就是围绕队列这个数据结构而拓展开的一段特殊程序,将这类程序单独部署就可以称之为消息中间件(也称:消息队列)。在分布式系…

    Linux 2023年6月7日
    089
  • Tomcat 实现双向SSL认证

    大概思路: 使用openssl生产CA证书,使用keytool生产密钥库 1、生成CA密钥 genrsa [产生密钥命令] -des3 [加密算法] -out[密钥文件输出路径] …

    Linux 2023年6月14日
    065
  • 初识pytest

    现在这份工作一直做硬件和算法方面,但本人还是很喜欢玩web,所以自学分享一下。 如何安装pytest 其实很简单 pip install pytest pip install -U…

    Linux 2023年6月8日
    083
  • Redis集群-主从架构

    1.为什么需要集群? 互联网思维一向讲究的是三高,即高并发,高可用,高性能。高并发:系统能够同时并行处理的请求,主要度量指标有响应延时,吞吐量,每秒查询处理,每秒事务处理,并发用户…

    Linux 2023年6月7日
    0101
  • 存储过程,存储函数(Oracle)

    –打印hello world create or replace procedure sayhelloworld as –说明部分 begin dbms_output.put_…

    Linux 2023年6月14日
    077
  • 008 Linux 文件查找 find

    在 Linux 系统,find 毫无疑问是最强的文件查找工具。find 一般会与其他命令结合,将查找到的结果作为参数传入到后置命令中,进行删除、统计、复制迁移等操作。 find /…

    Linux 2023年5月27日
    088
  • 继承、封装、多态的实现原理

    欢迎来到Java学习之继承、封装、多态的实现原理 目录 从JVM结构开始谈多态 JVM 的结构 Java 的方法调用方式 常量池(constant pool) 图 2. 常量池各表…

    Linux 2023年6月13日
    096
  • 浅谈kali : aircrack-ng套件

    aircrack-ng 套件包含有: Name Description aircrack-ng 破解WEP以及WPA(字典攻击)密钥 airdecap-ng airmon-ng 将…

    Linux 2023年6月14日
    069
  • Git工作流程

    学于2018年6月 总的流程: 一: 首先克隆整个项目到本地 二: 在本地创建一个属于自己的分支, 并push到远程(当时的工作情况是, 每实现一个功能, 或修改一个BUG都创建一…

    Linux 2023年6月6日
    0112
  • Power Outage

    由于Covid-19的原因一直是work from home, 在几天前家里的电表有问题需要人来维修,在这期间会停电大概半小时操作,虽然是wfh,但是还是要保障工作的正常进行,保守…

    Linux 2023年6月7日
    0104
  • 缓存提升性能的关键性手段

    提高「性能」的主要方式是优化,而优化的其中一个主要手段就是添加缓存! 在软件工程里有这么一句话:「没有银弹」!就是说由于软件工程的复杂性,没有任何一种技术或方法能解决所有问题!软件…

    Linux 2023年6月14日
    085
  • Java并发-建立线程

    一、建立新的线程 方法介绍 1、java.lang.Thread 1.0 Thread(Runnable target) 构造一个新线程,用于调用给定目标的run()方法。 voi…

    Linux 2023年6月7日
    081
  • macos 文件系统 git仓库 大小写敏感设置; git config core.ignorecase

    macos 的文件系统不区分文件名的大小写,这样会导致在一个文件夹,当修改一个文件名为大写的时候,git不能感知到。这样使用过程中会出现很多不必要的麻烦。之前设置过,最近使用,发现…

    Linux 2023年6月14日
    0104
  • 【Hash篇】哈希计算神器-HashMyFiles

    可直接拖放、复制粘贴、添加文件或文件夹的方式来批量计算Hash,操作简便、体积小、免费。这篇来介绍他的汉化和其它一些功能设置—【suy】 目录 1、绿色便携 2、批量算…

    Linux 2023年6月13日
    092
  • 在Linux下安装Redis

    1. 下载Redis的压缩包 [root@spirit-of-fire ~]# wget http://download.redis.io/releases/redis-5.0.5…

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