我可以访问唯一指针作为常量引用吗?



我有一个unique_ptr对象的集合,用于ms_order对象:

std::vector<std::unique_ptr<ms_order>> orders;

我想创建一个私有帮助程序函数来获取ms_order对象:

const std::unique_ptr<ms_order>& ms_order_collection::get_order(const std::string &id) {
    std::vector<std::unique_ptr<ms_order>>::iterator it =
            std::find(orders.begin(), orders.end(),
                      [&id](const std::unique_ptr<ms_order>& op)
                      { return op->getId() == id; });
    return *it;
}

我收到以下错误:

error: no match for 'operator==' (operand types are 'std::unique_ptr<ms_order>' and 'const ms_order_collection::get_order(const string&)::<lambda(const std::unique_ptr<ms_order>&)>')
  { return *__it == _M_value; }
           ~~~~~~^~~~~~~~~~~

这个错误对我来说毫无意义。我正在尝试做的事情甚至可能吗?如果是这样,我做错了什么?

你应该

使用std::find_if而不是std::find

std::find将给定迭代器范围内的每个元素与value进行比较。在您自己的情况下,您提供的值是一个匿名类型的 lambda 对象,与 orders 中的元素类型没有等价关系(或合适的operator ==

std::find_if在每个元素上调用函子,如果true则返回迭代器位置,否则,则返回迭代器位置。

最新更新