使用boost :: tuple <bool,t =“”>表示是否找到T是否合适?</bool,>

时间:2012-03-16 08:45:24

标签: c++ boost

假设我们需要一个返回某些东西的函数。但是找不到东西。我看到了选项:

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()

您认为什么更好?

2 个答案:

答案 0 :(得分:13)

我更喜欢:

4. boost::optional<T> find();

元组的问题是当T部分为假时bool部分无效;元组不强制执行此行为。对于同一问题,您的CheckableValue类与boost::optional的解决方法相同。

答案 1 :(得分:0)

  

返回一些东西。但是找不到东西。

您是否真的计划返回副本或某种参考资料? “未找到”意味着该功能通过在某个地方“找到”数据结构中的预先存在的值来工作。

在这种情况下,简单的解决方案是返回一个指向现有值的指针,对于not-found使用NULL。