假设我们需要一个返回某些东西的函数。但是找不到东西。我看到了选项:
1. T find(bool &ok); //return default T value if not found
我们可以制作一个结构:
template <typename T>
class CheckableValue
{
public:
CheckableValue(),
_hasValue(false)
{
}
CheckableValue(const T &t):
_value(t),
_hasValue(true)
{
}
inline bool hasValue() const {return _hasValue}
const T &value() const
{
assert(hasValue());
return _value;
}
private:
T _value;
bool _hasValue;
};
并制作功能:
2. CheckableValue<T> find();
或者我们可以使用:
3.boost::tuple<bool, T> find()
您认为什么更好?
答案 0 :(得分:13)
我更喜欢:
4. boost::optional<T> find();
元组的问题是当T
部分为假时bool
部分无效;元组不强制执行此行为。对于同一问题,您的CheckableValue类与boost::optional
的解决方法相同。
答案 1 :(得分:0)
返回一些东西。但是找不到东西。
您是否真的计划返回副本或某种参考资料? “未找到”意味着该功能通过在某个地方“找到”数据结构中的预先存在的值来工作。
在这种情况下,简单的解决方案是返回一个指向现有值的指针,对于not-found使用NULL。