我可以访问一个唯一的指针作为 const 引用吗?
can I get access to a unique pointer as const reference?
我收集了 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
rather than std::find
.
std::find
将给定迭代器范围内的每个元素与 value
进行比较。在您自己的情况下,您提供的值是一个匿名类型的 lambda 对象,与 orders
中的元素类型没有等价关系(或合适的 operator ==
)
std::find_if
在每个元素上调用仿函数,returns 迭代器位置,如果 true
,否则,结束迭代器。
我收集了 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
rather than std::find
.
std::find
将给定迭代器范围内的每个元素与 value
进行比较。在您自己的情况下,您提供的值是一个匿名类型的 lambda 对象,与 orders
operator ==
)
std::find_if
在每个元素上调用仿函数,returns 迭代器位置,如果 true
,否则,结束迭代器。