我有一個class
,非常不幸,它依賴於兩步初始化。這意味着,正在興建後,對象是還沒有準備好被使用,除非初始化方法被調用:Infere函數返回類型
class A
{
public:
A();
bool init();
private:
bool m_is_initialized;
};
類機構應當按照本政策的其他每個方法:如果該方法被調用的類時尚未初始化時,該方法應停止執行並在類特定的通道上記錄錯誤。
問題是某些方法有返回類型。這種情況下的策略是返回返回類型的默認構造值。
的想法是有一個簡單的宏,可以在每個方法開始實施被稱爲,是這樣的:
#define CHECK_INITIALIZED \
if (!m_is_initialized) \
{ \
LOG_E(m_channel, "%s object not initialized.", __PRETTY_FUNCTION__); \
assert(false); \
return; \
}
的return
聲明,順便說一句,只適用於void
功能,並並不適合每一種情況。有沒有辦法讓返回類型T
的宏擴展功能,以便我可以返回T()
,並使宏在任何地方都可用?
編輯: 請注意,由於項目限制,不幸的是例外是不可用的。
值初始化的返回值不會有效 一般來說。有些類型不是默認構造的,有些則是有效的返回值。例如,一個函數可以返回0或者「」或者返回成功的值。 – chris
而不是'返回'爲什麼不'拋出'? – NathanOliver
@chris我知道,但只要伐木發生,我們就很好。 – nyarlathotep108