gpt4 book ai didi

c++ - 在 std::vector> 中迭代 const T&

转载 作者:搜寻专家 更新时间:2023-10-31 01:43:11 25 4
gpt4 key购买 nike

我有这样一个类:

class RPNExpr
{
std::vector<std::unique_ptr<Expr> > m_exprs;
};

m_exprs 的每个元素都由构建函数堆分配,应该可以被其他类读取,但完全属于 RPNExpr,并且应该在 RPNExpr 超出范围时销毁。

如果 m_exprs 的读者能够在 const Expr& 上得到一个迭代器,即隐藏 vector 持有 unique_ptr 的迭代器,那就太好了。我希望这样做是为了与其他类保持一致,这些类将 unique_ptr 保存到它们的数据中并返回 const T& 给它们。

这个界面可能看起来像这样:

class RPNExpr
{
public:
SomeIterator expr_begin();
SomeIterator expr_end();
private:
std::vector<std::unique_ptr<Expr> > m_exprs;
};

然后,消费者应该能够使用标准迭代器运算符迭代 Exprs。

有什么好的方法吗?我应该写一个抽象指针的 vector 包装器吗?我不应该这样做并在我的 vector 中使用 unique_ptr 以外的东西吗?

最佳答案

boost 中有一个迭代器适配器可以做到这一点:

#include <boost/iterator/indirect_iterator.hpp>
...
using ExprIterator = boost::indirect_iterator<std::vector<std::unique_ptr<Expr>>::iterator>;
ExprIterator expr_begin() { return std::begin(m_exprs); }
ExprIterator expr_end() { return std::end(m_exprs; }

来源:http://www.boost.org/doc/libs/1_56_0/libs/iterator/doc/indirect_iterator.html

关于c++ - 在 std::vector<std::unique_ptr<T>> 中迭代 const T&,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25669120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com