私は、、、および--と呼ばれるクラスを使用するように設計されたシステムに取り組んでいますerror_code
。error_condition
新しいerror_category
std:C ++ 11では、現在、実際にBoost実装を使用しています。Chris Kholkoffの一連の記事を3回読んだことがありますが、これらのクラスを一般的に作成する方法を理解していると思います。
私の問題は、このシステムが個々のDLLに存在するプラグインを処理する必要があり、プラグインがエラーを発行する可能性があることです。errno
私の当初の設計では、さまざまなエラーコードすべてと、実際には値に対応していない特定のエラー条件の候補リストを含む1つのシステム固有のエラーカテゴリを計画していました。ここでの問題は、DLLがこれらのエラーコードの1つを使用できるようにするためerror_category
に、アプリ内のの唯一のインスタンスにアクセスする必要があることです。私は今、SetErrorCategory()
各DLLから関数をエクスポートすることでこれを処理しています。これは機能しますが、ちょっと厄介です。
私が見ている別の解決策は、各DLLに独自のエラーカテゴリとコードがあり、必要に応じて独自の条件があることです。これは、このライブラリ機能で想定されていたものに似ていると思います。ただし、これには、プラグインのエラースキームを認識し、プラグインのエラーに一致するアプリの条件を確認できる、メインアプリのエラースキームの比較関数が必要だと思います。これはさらに多くの問題を起こしやすいようですが、私はまだそれを実装しようとはしていません。実際のすべてのロジックに加えて、エラースキーム全体をDLLからエクスポートする必要があると思います。
もちろん、これを行う別の方法は、DLLからの数値エラーコードを使用して、アプリ側のエラーオブジェクトにそれらを詰め込むことです。プラグインが単純であるという利点がありますが、アプリで落とし穴が発生する可能性があります(たとえば、いくつかの異なるプラグインからオブジェクトをジャグリングする関数は、各エラーの原因に注意を払う必要があります)。
ですから、私の具体的な質問は、これら3つのオプションのうち、どれを使用しますか、そしてその理由は何ですか。明らかに実行不可能なのはどれですか?そしてもちろん、私には起こらなかったより良い方法はありますか?