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)

大家都在看

  • cron 表达式

    cron 表达式 1.简介:一个cron表达式最少有5个空格来分割时间元素,总共有7个元素,分别如下: ① 秒(0-59) ② 分钟(0-59) ③ 小时(0-23) ④ 天(月的…

    Linux 2023年6月7日
    071
  • linux命令技巧

    linux命令文件夹处理: 1.cp 命令复制,修改名称(没有修改名称的直接命令,通过复制来修改名称)。 一般的命令很简单,cp -r dir1 /dir/ 这个命令是复制目录di…

    Linux 2023年6月13日
    0101
  • 5.3 Linux Vim三种工作模式

    通过前面的学习我们知道,Linux 系统中所有的内容都以文件的形式进行存储,当在命令行下更改文件内容时,常会用到文本编辑器。 我们首选的文本编辑器是 Vim(至于为什么,可查看《V…

    Linux 2023年6月7日
    099
  • Guava中这些Map的骚操作,让我的代码量减少了50%

    Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另…

    Linux 2023年6月7日
    0117
  • JVM 运行时数据区 堆和方法区

    2、运行时数据区 哔哩哔哩 尚硅谷视频 宋红康老师 2.5、堆 堆的核心概述 一个JVM实例只存在一个堆内存,堆也是Java管理内存的核心区域 Java 堆区在JVM启动的时候即被…

    Linux 2023年6月7日
    0119
  • python语法01

    在某.py文件中调用其他.py文件中的内容。全局变量的使用。线程的使用。if name == ‘ main‘: 的作用新建两个python脚本文件f1Fil…

    Linux 2023年6月14日
    087
  • Spring事务管理,声明式事务和编程式事务实现

    数据库操作过程中,对于增删改等操作,因为涉及到数据库状态的变更,为保证数据安全,需要进行事务管理;Spring事务管理有两种方式,即声明式事务管理和编程式事务管理; 连接池配置: …

    Linux 2023年6月16日
    0207
  • SPRINGBOOT(38)整合(9)redis

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/qiu-hua/p/16552545.htmlAutho…

    Linux 2023年5月28日
    0102
  • 聊一聊如何搭建高性能网站哪一些事

    在开发中经常会遇到网站的性能平静下来,打开慢的情况。我们平常开发中怎么 一步一步排查这些问题并 解决问题呢 在快节奏的时代中,慢是个不容忍受的事情。 一、 为什么会’慢…

    Linux 2023年6月14日
    0132
  • 我为 Netty 贡献源码 | 且看 Netty 如何应对 TCP 连接的正常关闭,异常关闭,半关闭场景

    欢迎关注公众号:bin的技术小屋,本文图片加载不出来的话可查看公众号原文 本系列Netty源码解析文章基于 4.1.56.Final版本 写在前面….. 本文是笔者肉眼…

    Linux 2023年6月6日
    0114
  • 面试题:海量数据处理利器-布隆过滤器

    概念 原理 布隆过滤器的使用场景 简单模拟布隆过滤器 Guava布隆过滤器 Redis布隆过滤器 布谷鸟过滤器 作者:小牛呼噜噜 | https://xiaoniuhululu.c…

    Linux 2023年6月6日
    0171
  • @EnableFeignClients注解源码解析

    转载请注明出处: @EnableFeignClients 注解定义的源码 这个注解通过@Import注解导入一个配置类FeignClientsRegistrar.class ;Fe…

    Linux 2023年6月14日
    099
  • 冒泡排序

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月8日
    0113
  • 一文带你玩透结构体和方法

    package main import ( "fmt" ) //定义结构体类型User type User struct { username string &…

    Linux 2023年6月7日
    085
  • docker-compose安装,yml文件配置

    1、离线安装 https://github.com/docker/compose/releases 移动文件 mv docker-compose-linux-x86_64 /usr…

    Linux 2023年5月27日
    0110
  • Java基础系列–03_Java中的方法描述

    Java的方法(函数)的描述 方法(1)方法的定义:就是完成特定功能的代码块。注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法。(2)格式:修饰符 返回值类型 方法…

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