【发布时间】:2016-04-24 15:37:48
【问题描述】:
我想写一个这样的c++函数:
#include <system_error>
std::errc f() { return std::errc::success; }
但我不明白如何使用 std::errc 'enum class' 类型返回成功的值(在本例中为 0)。我看到的一种方法是返回 int:
template <typename E>
constexpr typename std::underlying_type<E>::type to_underlying(E e) {
return static_cast<typename std::underlying_type<E>::type>(e);
}
int f() { is_succ() ? 0 : to_underlying(err); }
但对我来说它看起来很丑。从 std c++ 0x14 中的函数返回面向 C 的成功/错误代码的标准方法在哪里?
附言。我正在使用 MS VC 2015 补丁 2。
【问题讨论】:
-
为什么不直接使用
int、EXIT_SUCCESS或EXIT_FAILURE? -
@CoffeeandCode: 1972 调用..
-
好的。我的主要目标是编写一个 c-api 包装器 c++ 库。我已经声明了一组函数 extern "C" 等等。现在我必须从他们那里返回一个 int 来指示错误状态(或成功)。因此,我必须将异常或内部错误代码转换为对 C++ 代码中的 C 用户有价值的东西。我认为 std::errc 是一个不错的选择。看来这不是个好主意。现在我在原生 int 和 boost::system::errc 类型之间进行选择。 PS。对不起我的英语不好:)
-
您只需要返回默认构造的 std::error_code 实例。这有什么问题吗?
-
现在枚举
std::from_chars中没有成功值的情况看起来是有史以来最糟糕的设计。成功由非枚举值表示,这通常意味着出现了令人难以置信的错误。