我有一个类是这样的:迭代常量T&在一个std ::矢量<性病::的unique_ptr <T>>
class RPNExpr
{
std::vector<std::unique_ptr<Expr> > m_exprs;
};
m_exprs的每个元素是堆分配由助洗剂功能,应该是可读由其他类,但纯粹由RPNExpr拥有,并应在RPNExpr超出范围时被破坏。
对于m_exprs的读者能够得到一个迭代器超过const Expr &,即隐藏矢量持有unique_ptrs这一事实的迭代器将会很好。为了与其他类保持一致,我希望这样做,它们将unique_ptrs保存到它们的数据中,并向它们返回const T &。
的功能,这可能看起来像:然后
class RPNExpr
{
public:
SomeIterator expr_begin();
SomeIterator expr_end();
private:
std::vector<std::unique_ptr<Expr> > m_exprs;
};
消费者应该能够通过使用标准的迭代器运算符来遍历Exprs。
有没有一种很好的方法来做到这一点?我应该编写一个抽象指针的向量包装器吗?我应该不这样做,并在vector中使用除unique_ptrs之外的其他东西吗?
是'的boost :: ptr_vector'合适的替代者? – 2014-09-04 15:16:55
@ C.R。我想我可以使用ptr_vector并手动删除〜RPNExpr中的所有Exprs。我希望我能够避免使用提升并保留我的自动删除,但这似乎是一个很好的选择,如果这是不可能的,谢谢。 – TartanLlama 2014-09-04 15:24:08
我认为你可以定义你自己的迭代器类,该类继承自默认的迭代器,并且在你解引用它时返回一个const T&。 – vratojr 2014-09-04 15:30:39