我正在重構一些舊的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因爲......這麼多東西。例外是一個工具。無視所有事情,並抨擊你的信念,你應該如何編程是另一回事。一個句子回覆很少有用。作爲控制流的例外?等..請擴展你的推理,我會投票並說我錯了。 – 2011-09-12 18:00:59
看到我的答案和鏈接的GOTW。例外情況不適用於所有情況,但對於那些情況而言,有***無***有效替代品。失敗的對象構造就是其中之一。 – spraff
如何不在流控制更適合的構造函數中進行操作。有時在這裏做這些事情是完全有效的。這顯然不是這種情況。真的,如果有機會,你們會拋出CHeyWeJustAddedANumberException:P – 2011-09-13 03:57:43