如何 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>
。如果我正确理解你的问题,你正在尝试做一些事情,在这种情况下这不是必需的:如果你想遍历 int
s,你需要 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 和解除引用以获取当前对象的值。
如何创建指向包裹在 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>
。如果我正确理解你的问题,你正在尝试做一些事情,在这种情况下这不是必需的:如果你想遍历 int
s,你需要 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 和解除引用以获取当前对象的值。