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真的很棒。我在很多看起来像海报的地方使用它。