私は例外をスローします(what is suggested hereと非常に似ている)、このコードを持っている:<system_error>のsystem_categoryエラーコードで汎用エラーコード列挙型を使用するにはどうすればよいですか?
int accept4(int sockfd, sockaddr *addr, socklen_t *addrlen, int flags)
{
const int fd = ::accept4(sockfd, addr, addrlen, flags);
if (fd < 0)
{
const auto tmp = errno;
throw ::std::system_error(tmp, ::std::system_category(), "accept4(2)");
}
else
{
return fd;
}
}
そして、特定の例外の理由のためのテストのために、このコード:
catch (const ::std::system_error &e)
{
static const auto block_err = ::std::system_error(EWOULDBLOCK,
::std::system_category());
const auto ecode = e.code();
// EWOULBLOCK is fine, everything else, re-throw it.
if (block_err.code() != ecode)
{
throw;
}
}
これは一種の不冗長ではないようです物事を行う正しい方法。この一般的なエラーのアイデアがあり、システム全体のエラーコードとこれらの一般的なエラーの間で変換するはずの何らかの種類のシステムとともに、それらの完全な列挙型(::std::errc
参照)があります。
一般的なエラーコードとカテゴリを使用したいと思います。私はそれらを動作させることができません。どのように私はその仕事をするのですか?十分に高品質*の実装に