1

例外コードとエラー コードを含む C++ ファイル ライブラリを作成しました。プログラムの実行中に例外を無効にすることができます。その場合、ユーザーはエラー コードを確認する必要があります。もちろん、例外のスローが有効になっている場合は、呼び出された関数が戻る前に例外がスローされるため、エラー コードは返されません。現在、例外が無効になっている場合でも例外がスローされる可能性があります (バグ)。すぐに修正します。誰かが、例外コードとエラー コードの両方を持つのは悪い設計だと考えているとコメントしています。私は彼に同意し、エラーコードを削除し、ライブラリにカスタム派生例外をスローさせて、より多くのエラー情報を表示させようとしています。しかし、私は躊躇します。パフォーマンス上の理由から、このハイブリッド アプローチを採用しています。これは私がやろうと思っていることです:

ユーザーが共通の構成ファイルで次を定義する場合

#define ELMAX_EXCEPTION 1

フォローコード

int Write(std::wstring str) ELMAX_THROW_OR_NOT;

2のいずれかに展開されます。

// under C++11 compiler
int Write(std::wstring str) noexcept;

// under C++98 compiler
int Write(std::wstring str) throw();

ELMAX_EXCEPTIONが定義されていないかゼロの場合、マクロは何も展開されません。

int Write(std::wstring) ;

私がこれをしたい理由は、コンパイラーがスタック巻き戻しコードを生成しないこと (例外用) のパフォーマンスの向上を望んでいるライブラリー・ユーザーのためであり、コンパイラーはそのような関数をより適切に最適化できます。私の C++ ファイル ライブラリは C ファイル API を使用しており、例外をスローする唯一のものは、追加する予定の new キーワードnothrowです。UTF-8 コードも例外をスローする可能性があります (これも変更する必要があります)。

char *parr = new (nothrow) char[num];

if(parr==NULL)
    // handle it either through error code or throw exception (if enabled)

私のライブラリエラーに対して、純粋な例外アプローチまたはハイブリッドアプローチ(前述のとおり)を使用する必要があるかどうか、親切にアドバイスしてください。ありがとうございました。

4

1 に答える 1

0

それはあなたがライブラリで何をしたいかによります。設計の観点からは明らかに例外の方が優れていますが、一部の種類のアプリ(没入型3Dゲームなど)では例外が無効になっていることがよくあります。

于 2012-12-29T09:42:23.247 に答える