我有一个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