私は以前のCスタイルのコードのいくつかをリファクタリングして、C++コードをもっと整えるよう取り組んでいます。私はまだC++コンストラクタはエラーをどのように報告する必要がありますか?外部フラグへのポインタ?
私が働いているコードの例に少し新しいです、私はクラスの開発を考えていた
Errmsg foo{
ErrMsg err = NoError;
/*
Some Processing
*/
err = foo_cleanup(err,/* some parameters*/);
/*
Some More Processing
*/
return err;
}
を次のようにあるので、
class foo_class
{
public:
foo_class(Errmsg errmsg_init&,/*Some other arguments */):
errmsg(&errmsg_init),
/*Initialize other parameters */{}
void foo_cleanup (/*Other parameters*/);
// same functionality, but since the source variable is available,
// it can be modified without having to return any variable
~foo_class(){foo_cleanup(/*Parameters*/);}
/*
Member functions
*/
private:
Errmsg* errmsg;
/*Some other parameters */
};
Errmsg foo{
ErrMsg err = NoError;
foo_class foo_obj(err);
/*
Some Processing
*/
// The class would be
//cleaned up before returning
// and the err variable would be
//modified in the destructor
return err;
}
私が持っているが、このアプローチに類似したものを使用することができましたが、これが移植可能かどうかはわかりません。
これは正しいことですか?
もしそうでなければ、エラーメッセージ変数を参照渡しする代わりにポインタを使ってクラスを初期化するだけですか?それとも他に何かできますか?
「戻りエラーメッセージ」アプローチを使用する外部コードへの/からの関数呼び出しが多数あるため、現在の段階で例外を使用することはできません。
-1 ...非常に多くのものがあります。例外はツールです。すべてを無視して、あなたの信念を打ち砕くと言って、どのようにプログラムするべきかは別のものです。 1つの文の応答はめったに役に立ちません。制御フローとしての例外?あなたの推理を広げてください。私はそれを投票し、私が間違っていたと言っています。 –
私の答えとリンクされたGOTWを参照してください。例外はすべての状況に適しているわけではありませんが、そのような状況では***有効な代替手段はありません。失敗したオブジェクトの構築はそれらの1つです。 – spraff
フロー制御がより適しているコンストラクタでは、なにもしないでください。時には、この種のことを行うために完全に有効です。これは明らかではありません。チャンスがあれば、本当にあなたはCHeyWeJustAddedANumberExceptionをスローします:P –