C++ 使用boost::tuple<;好吗;布尔,T>;指示是否找到T?
假设我们需要一个返回某些内容的函数。但是有些东西找不到。我看到了一些选择:C++ 使用boost::tuple<;好吗;布尔,T>;指示是否找到T?,c++,boost,C++,Boost,假设我们需要一个返回某些内容的函数。但是有些东西找不到。我看到了一些选择: 1. T find(bool &ok); //return default T value if not found 我们可以制作一个结构: template <typename T> class CheckableValue { public: CheckableValue(), _hasValue(false) { } CheckableValue(co
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;
};
模板
类可检查值
{
公众:
CheckableValue(),
_hasValue(false)
{
}
可检查值(常量T&T):
_值(t),
_hasValue(true)
{
}
内联bool hasValue()常量{return\u hasValue}
常量T&值()常量
{
断言(hasValue());
返回_值;
}
私人:
T_值;
布尔值;
};
并使功能:
2. CheckableValue<T> find();
2。CheckableValue查找();
或者我们可以使用:
3.boost::tuple<bool, T> find()
3.boost::tuple find()
你认为什么更好?我更喜欢:
4. boost::optional<T> find();
4。boost::可选的find();
元组的问题是当bool
部分为false时,T
部分无效;元组不强制执行此行为。对于相同的问题,您的CheckableValue类与boost::optional
相同
返回一些东西。但是有些东西找不到
你真的打算归还一份副本,或者是这件事的某种参考资料吗?“未找到”意味着函数通过在某个数据结构中“查找”预先存在的值来工作
在这种情况下,简单的解决方案是返回一个指向现有值的指针,使用NULL表示“未找到”。在某些集合中可能不需要。该值可以在运行时计算并返回。但如果某些输入不正确,它可能会发出一个标志,指示输入错误。返回指针到刚刚分配到heap对象上是不方便的,我认为(您可能会说auto_ptr将完成这项工作,但我认为boost::optional要好得多)boost optional真的很棒。我在很多看起来像海报的地方使用它。