假设我定义了某种容器A
:
struct A
{
iterator begin(){ return iterator(this,0); }
const iterator cbegin() const { return iterator(this, last());}
//...
};
假设现在我想声明iterator
(A的一部分):
struct A::iterator
{
iterator ( A* ptr, size_t idx){};
//...
};
我会这样使用:
const A a;
A::iterator it = a.cbegin();
这不起作用,因为指针传递给了构造函数iterator
是非常量。
理想的解决方案类似于返回 const 对象的特定构造函数:
const A::iterator( const StringUtfInterface *p, size_t s); //Not valid
这(显然)在 C++ 中无效。我想知道解决这个问题的方法是什么?
我真的需要声明/定义一个新的 const_iterator 类吗?const
关键词还不够?
相关问题(但不相同):
- 为什么C++没有const构造函数? https://stackoverflow.com/questions/6936124/why-does-c-not-have-a-const-constructor
- 获取 const 引用的迭代器 https://stackoverflow.com/questions/35919822/get-iterator-for-const-reference
const
关键词还不够?
实际上,const
关键字太多:它迫使你写
const A::iterator it = a.cbegin();
这会阻止你使用++it
稍后的。
您需要提供两个单独的类,但这并不意味着您必须编写两次代码。您可以通过以下方式构造迭代器的实现:将完成所有工作的公共类嵌入到常量和非常量迭代器实现中,从而向调用者公开嵌入式实现的相关方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)