-6

http://en.cppreference.com/w/cpp/error/exception&http://en.cppreference.com/w/cpp/io/basic_fstreamを参照して、スローされる可能性のあるI/O例外を探しましたカスタム例外クラスを作成でき、サンプルコードを提供するWebサイトがたくさんあることは知っていますが、特にベストプラクティスに関するガイダンスが必要です。

また、生活を楽にするために集中して使うべき図書館はありますか?

4

3 に答える 3

5

C ++ 11では、低レベルのエラー用に新しいヘッダーsystem_errorが導入されています。独自のエラーカテゴリを作成することができます。

これは、最新のC++で独自のエラー処理を作成するための良い出発点になる可能性があります。

于 2013-03-14T15:52:22.033 に答える
4

事前定義された例外はたくさんありますが、一般的には、独自に定義するかstd::runtime_error、最初の近似としてスローします。

一般的に、あなたは拡張するでしょうstd::runtime_error、またはそれの別の派生物std::exceptionがより適切です。

例えば、

class io_error : public std::runtime_error {
public:
    using std::runtime_error::runtime_error;
};
于 2013-03-14T15:51:58.167 に答える
4

質問のライブラリ部分に答えるには、を見てくださいboost::exception

Boost例外はスレッド間を移動でき、例外operator<<をキャッチ(およびオプションで再スロー)すると、情報を動的に例外にアタッチできます。また、BOOST_THROW_EXCEPTIONマクロは、ファイル、行、および関数名を式に記録して、きれいに印刷できるようにします。

それ以外の場合は、プロジェクトに独自の例外を定義するのが一般的な方法です。しかし、私はあなたが話している「javaのようなユーティリティ」に精通していないので、より具体的な答えを出すのは難しいです。

より一般的な注意として、C ++の設計原則の1つは、要求したことを実行することであり、それ以上のことは何もしません。これは、場合によっては祝福であり、場合によってはより多くの作業を意味します。これはJavaとはまったく異なります。throw例外の主な目的は、通常のプログラムフローを/で中断することcatchであり、C++はまさにそれを実行します。

単純な文字列メッセージが必要な場合:

struct E: std::exception {
  const char* msg;
  E(const char* msg_): msg(msg_) {}
  const char* what() const { return msg; }
};
// ...
throw E("invalid operation name");
于 2013-03-14T16:00:47.543 に答える