【发布时间】:2022-01-04 20:14:48
【问题描述】:
我想在概念上做这样的事情。
enum class Status {
READY,
NOT_READY
};
class Foo {
public:
Status get_foo(const ExpensiveToCopyType& f) {
if (is_ready) {
f = m_foo;
return Status::READY;
} else {
return Status::NOT_READY;
}
}
private:
bool is_ready;
ExpensiveToCopyType m_foo;
}
重要的部分是我希望能够为调用者提供m_foo 的只读句柄,并指示它是否处于有效状态。它会一直存在,但它可能会或可能不会处于从调用者的上下文中有效的状态。例如考虑将其绘制到屏幕上,如果它“未准备好”但不会导致无效访问,则可能会产生视觉伪影。
表面上这可以通过std::shared_ptr 或类似的方式完成,但我想知道是否可以通过引用来实现。
【问题讨论】:
-
听起来你可以只返回一个常规的 const 指针,或者如果状态没有按照约定准备好,则返回
nullptr。 -
为什么“不退货”很重要?返回状态和句柄的组合状态是不可接受的吗?
-
参考不可重新安装。这是它的主要好处。您需要可复制或可分配的东西,例如原始指针、智能指针或 std::reference_wrapper。
-
@user17732522 这是一种完全有效的方法,我希望只是保持干净的约定。整个系统使用这些状态代码向调用者指示状态,我不想对返回类型进行一次性案例。
-
最简单的方法似乎是返回一个指针,如果对象不处于有效状态,则返回一个
nullptr。