如何创建指向包含在unique_ptr中的指针的指针?换句话说,是否有一种合理的方式来编写这个函数:
int **getIterator(std::unique_ptr<int>& p)
{
/* error: lvalue required as unary ‘&’ operand */
return &p.get();
}
答案 0 :(得分:1)
我想返回一个指针,用作具有期望迭代器的接口的迭代器。我想传递algo(getIterator(X),getIterator(X)+1),以便单个项看起来像集合。
您正在使用std::unique_ptr<int>
。如果我正确理解你的问题,那你就是在尝试做一些事情,在这种情况下是不必要的:如果你想要遍历int
,你需要int*
(指向对象的指针),而不是{ {1}}(指向指针的指针)。
使用此:
int**
然后,你可以做你想做的事:
int* getIterator(std::unique_ptr<int>& p)
{
return p.get();
}
我希望algo(getIterator(X), getIterator(X) + 1);
的定义与此相似:
algo
如果您执行以下操作:
template <class Iter>
Result_type algo(Iter begin, Iter end)
{
//algorithm
}
您将收到两个std::unique_ptr<int> p = /* initialize */;
algo(getIterator(p), getIterator(p) + 1);
类型的参数,可以安全地向前/向后移动并取消引用以获取当前对象的值。