如何 return 指向 unique_ptr 包装指针的指针

How to return a pointer to a unique_ptr wrapped pointer

如何创建指向包裹在 unique_ptr 中的指针的指针?也就是说,这个函数有没有好的写法:

int **getIterator(std::unique_ptr<int>& p)
{
     /* error: lvalue required as unary ‘&’ operand */
     return &p.get();
}

I want to return a pointer to use as an iterator with an interface that expects iterators. I want to pass algo(getIterator(X), getIterator(X)+1) so that single items look like collections.

您正在使用 std::unique_ptr<int>。如果我正确理解你的问题,你正在尝试做一些事情,在这种情况下这不是必需的:如果你想遍历 ints,你需要 int* (指向对象的指针),而不是 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);

您将收到两个 int* 类型的参数,可以安全地移动 forward/backward 和解除引用以获取当前对象的值。