在 C++ 中返回错误代码的正确方法是什么

2024-01-15

我正在使用错误代码来处理我的 C++ 项目中的错误。问题是如何从应该返回某些变量/对象的函数返回错误代码。

考虑一下:

long val = myobject.doSomething();

这里,myobject 是某个类的对象。如果 doSomething 函数遇到一些错误情况,那么它应该如何通知调用者(不使用异常)。

可能的解决方案:

  1. 类中有一个数据成员(比如 err_),可以由调用者检查。但在共享同一对象并调用同一函数的多线程应用程序中,这是不安全的。
  2. 使用一些全局错误变量,在多线程环境中再次出现相同的问题。

现在我如何通知调用者某些错误情况?


制作一个模板,例如,Maybe它由您的返回值类型参数化。每当您返回一个值时,请将其包装在该模板中,如下所示:

Maybe<long> result = object.somemethod();

The Maybe模板将有一种用错误代码实例化的方法(可能是静态方法):

return Maybe<long>::error(code);

但通常只会返回以下值:

Maybe<long> retval;
retval = 15;
return retval;

(当然,您必须重写适当的构造函数、赋值运算符等)

在客户端,您调用一个方法来检查错误。

Maybe<long> result = object.somemethod();
if (result.is_error) 
{ 
    ... handle the error ...
}
else
{
    ... use the result ...
}

同样,您需要定义适当的运算符才能使用Maybe<long>凡是有一个long必需的。

这听起来像是很多工作,但实际上,在制作一个好的、防弹的产品时,这些工作就已经完成了。Maybe模板。您还必须对其进行一些性能调整以避免讨厌的开销。如果您想让它更加灵活,您可以在返回值类型和错误类型上对其进行参数化。 (这只是复杂性的微小增加。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 中返回错误代码的正确方法是什么 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • 如何在 laravel 5.3 中显示图像

    我将图像存储在公共文件夹中现在我想显示我给出的路径的图像 但图像不显示任何人帮助我我的代码出了什么问题 我的图像完整路径是 public admin product img src height 30px width 30px 首先 您不应
  • 使用不同的输入参数多次运行 Fortran 代码

    我想使用不同的输入参数集多次运行 Fortran 77 程序 我已经确保输出文件名会根据我使用的不同输入参数而更改 但我不确定如何运行具有不同输入参数集的程序 而不必每次都转到代码来更改参数 为了说明我的问题 这里有一个简单的代码 PROG
  • 带皮肤的 BottomSheetDialogFragment 主题

    如何结合BottomSheetDialogFragment主题与其他主题 我的应用程序具有使用主题制作的皮肤 BottomSheetDialogFragment应该有圆角 我使用以下方法实现这一点 override fun onCreate
  • 为 iPhone 创建组合框 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 由于没有预先存在的用于创建组合框 或选择框 的组件 如通过 Safari 在网页上看到的那样 有人可以
  • 如何将kinect的深度图像与彩色图像对齐

    Kinect 上的颜色和深度传感器生成的图像略有不对齐 我怎样才能改变它们以使它们对齐 关键是调用 Runtime NuiCamera GetColorPixelCoordinatesFromDepthPixel 这是 Runtime 类的
  • 4-5-4 国家零售基金会日历 csv 下载或创建函数

    我一直在谷歌上到处搜索 但没有找到这个 我工作的零售客户使用 NRFretail 日历 NRF site http nrf com 我想知道是否有人曾经使用这些值创建过查找 维度表 Thanks 您可以找到一个 perl 模块 可以在 CP
  • 如何在 iOS 中裁剪视频

    我正在查看 Apple 提供的 RosyWriter 示例代码作为起点 我想找到一种裁剪视频的方法 所以我有 iPhone 相机的全分辨率视频 但我只想使用其中的裁剪部分 并旋转该子部分 我认为在captureOutput didOutpu
  • 如何在wxPython中制作类似日志框的东西

    我假设这可以通过多行文本框实现 但不确定如何做到这一点 我想做的是在我的 wxPython 程序中创建一个日志框 当某些操作发生时我可以在其中写入消息 另外 我不仅需要在事件发生时写入消息 还需要在代码中的某些时间写入消息 我如何才能重绘窗
  • Castle Windsor:当我的程序集无法访问基础类型时,如何注册工厂方法?

    我有一个项目 其中我的业务层是使用 DI 构建的 但我正在尝试采取额外的步骤并使用 Windsor 来管理对象构建 假设我有一个预先存在的数据层 我不想修改 可以通过以下接口访问 interface IDataFactory IDataSe
  • jQuery 在网站/内容加载后淡入淡出?

    是否有任何教程或插件可以在网站正确加载后淡入视图 以限制任何不和谐等 使内容基本上顺利显示 我想如果它只是一个特定区域会更容易 因为页眉或页脚已经被缓存 从以前的页面 例如 带有各种缩略图的作品集页面 它们只有在准备好后才会顺利显示 这可以
  • 如何告诉 Django,memcached 运行时的项目大小大于默认值?

    我使用新设置来增加 memcached 中的项目大小 但我无法通过 Django 后端存储大于 1mb 的内容 我知道memcache模块需要一些设置来实现这一点 Django 在后端使用这个模块 From memcache py 可以保存
  • Android 如何传递 Activity.class 作为函数的参数

    我最近从 Python 迁移到 Android 但被困在这里 这是我的类声明 用于为接受必要参数的警报对话框创建一个通用函数 public static AlertDialog Builder getAlertDialog String s
  • 我可以在 MVC 3 中拥有/链接 1 个以上的 _Layout 页面吗?对于 cshtml 页面?

    我有一个布局页面和一些使用它的页面 但我想在一些使用它的子页面上实现导航控件 所以我想使用另一个嵌套布局页面 这可能吗 是的 效果很好 只需告诉您的布局页面使用另一个布局页面 Layout pathToMyOtherLayout 您还可以使
  • Android - 调用默认浏览器并重定向到指定的网址

    Hi我想编写一个应用程序来调用默认浏览器并重定向到指定的网址 任何建议 1 调用默认浏览器 2 重定向到指定的 url Thanks 您只想使用网页的 Uri 作为数据元素来启动 ACTION VIEW 意图 Intent httpInte
  • this._mouseInit() 不是一个函数

    我刚刚将代码更新到 jqueryui 1 8 它给了我这个错误 this mouseInit is not a function 我该如何解决这个问题 我有一个可以让鼠标开始拖动和停止的小部件 这是我的代码 widget ui boxToo
  • header('P3P: CP="CAO PSA OUR"'); 是什么意思?做?

    What is header P3P CP CAO PSA OUR for 如何 为什么让这个脚本在 IE 中正常工作 session start if session is registered pre myusername header
  • javascript中相对路径和绝对路径的区别

    有一些小的澄清 据我所知 这些是相对路径和绝对路径 Completely relative img src kitten png Absolute in all respects img src http www foo com image
  • 位置为绝对的元素上的垂直空间

    我如何制作元素position absolute and 动态高度仅使用 css 占据垂直空间 我可以使用容器和显示方面的技巧吗 不幸的是 根据定义 使用绝对定位意味着您的元素不再占用空间 所以不行 只能通过css没有办法做到这一点 您当然
  • 如何检查多值参数中是否选择了某个值

    在 SSRS 2008 中 我使用多值参数为特定参数选择多个值 在我的报告中 我有条件格式 如果选择了该项目 则特定标签必须为蓝色 否则它会保持黑色 我的直觉是尝试使用 SQL 方式 但我错了 Switch Fields groupType
  • 在 C++ 中返回错误代码的正确方法是什么

    我正在使用错误代码来处理我的 C 项目中的错误 问题是如何从应该返回某些变量 对象的函数返回错误代码 考虑一下 long val myobject doSomething 这里 myobject 是某个类的对象 如果 doSomething