2017-08-25 4 views
3

私はリモートシステムと通信するライブラリを開発していますが、有限で既知の数のエラーコードが返されますが、メッセージは予期しない方法で変更される可能性があります。std :: error_categoryは動的メッセージで使用できますか?

私はexploringstd::error_codeです。自分のコードを展開する代わりに、自分のライブラリのユーザーにC++固有のエラーを処理する方法を提供する方法です。私は例外をスローすることはできません。

Tutorialsstd::error_categoryは、常にエラーコードに応じてハードコードされたメッセージが返されている静的インスタンスが使用されていることを示しています。

しかし、我々はキャッシュできないダイナミックなメッセージを持っている場合は?特定のメッセージをstd::error_codeの特定のインスタンスにリンクするにはどうすればよいですか?

+0

誰も 'std :: error_code'を使用しません。 – o11c

+0

@ o11c彼らはthoする必要があります。 – ruipacheco

答えて

1

短い答え:あなたは本当にそれを行うことはできません。

error_codeはコピー可能な値のタイプであることを意味します。カスタムメッセージが許可されている場合、エラーをコピーするには、メッセージデータの完全コピーを行うか、または参照カウントを維持する必要があります。

これは、多くのアプリケーション/ライブラリの内部ループで使用するには重すぎるエラーコードになり、基本的にプログラマーはコードのその部分に対して異なるエラー処理メカニズムを使用することになります。error_codeは本質的に無意味です。

スレッドローカルエラー状態(古い学校のようにerrno)を使用して回避することは可能かもしれませんが、長時間エラーを保存できないため、これをお勧めします。

+0

std :: error_codeと例外以外のエラーを処理するC++の方法はありますか? – ruipacheco

+0

@ruipachecoはい! C++は柔軟性があり、どのようなエラー処理スキームを実装してもおそらく実装可能な言語です。私は個人的にはAndrei Alexandrescuの '' expected <> 'スキームが本当に好きです。私の経験@ruipacheco – Frank

+0

は、失敗の理由は、すべてあなたが必要とする、一般的に故障箇所の簡単な書き込み・ツー・ログと組み合わせて、そう簡単な成功/失敗の状態を返して、より多くの場合よりデバッグのためにのみ、これまでに便利であることです本当に。 – Frank

関連する問題