2

次の状況を考えてみましょう: サードパーティのライブラリを含むライブラリがあります。このサード パーティ ライブラリは、std::exception. ライブラリを呼び出すコードにこれらの例外を伝えたいのですが、呼び出し元のコードにサード パーティのライブラリも含める必要はありません。そのサードパーティのライブラリは、後で変更される可能性があります。

次のように、サードパーティの例外から継承する独自のクラスをライブラリに作成することは理にかなっているようです。

class myException: public thirdParty {};

thirdParty のインスタンスをキャッチして myException にコピーする簡単な方法はありますか? 後で myException に機能を追加するかもしれませんが、今のところ、サードパーティのライブラリを含めずに、サードパーティを呼び出し元のコードで利用できるようにしたいだけです。

もちろん、サードパーティ ライブラリのヘッダーがライブラリ ヘッダーに含まれ、呼び出しコードに含まれるため、呼び出しコードがサードパーティについて認識していることは認識しています。しかし、私は次のような契約を確立しようとしています。「ねえ、これらは私のライブラリがスローする例外です。後でサードパーティのライブラリを交換するかもしれませんが、例外が行ったことを行う例外をスローするつもりです. "

これは正しいですか?これを行うより良い方法はありますか?呼び出しコードにサードパーティの例外を認識させる必要がありますか?

4

1 に答える 1

2

サードパーティライブラリとの結合を減らすことが目的の場合は、コードを境界と見なす必要があります。そのため、実装をユーザーに漏らすことはありません。

問題は、サードパーティのライブラリがスローする例外をユーザーが気にする必要があるのはなぜですか?彼らはあなたのコードの抽象化とインターフェースを気にする必要があります。

したがって、これらの例外から継承するのではなく、コードでスローする例外を反映する一連の例外を作成します。それらに同じ名前を付けることができますが、それらの例外の所有者である必要があります。

于 2012-06-01T14:40:43.287 に答える