通过引用传递由非常量迭代器指向的值
Pass value pointed by non-const iterator by reference c++
我有一个std::set<MyType>
容器,我是通过某个类的get函数获得的,也就是说,我有这样的东西:
typedef std::set<MyType, compareMyType> MyTypeSet; // this a singleton class class MyClass { ... public: MyTypeSet& getMySet() { return mySet_; } ... private: MyTypeSet mySet_; ... }
然后在另一个地方我使用这个容器:
MyClass obj;
MyTypeSet& mySet = mtyObj->getMySet();
MyTypeSet::iterator itBeg = mySet.begin();
// Then I'm trying to call f function
f(*itBeg);
其中f函数的签名如下:
void f(MyType& param);
我得到这样的编译错误:
note: candidates are: void f(MyType&)
error: no matching function for call to f(const MyType&)
我该如何解决这个问题?
在不了解您的环境细节的情况下,我猜您的系统对set
的实现试图通过将iterator
混叠为const_iterator
来"安全"(这样您就不会试图通过迭代器修改集合项,这是危险的,因为它可能会改变排序顺序)。
如果是这样,那么最简单的修复方法就是按照编译器的建议将函数的签名更改为void f(const MyType& param)
。如果您确实需要修改参数(以不改变排序顺序的方式),有各种方法可以绕过const
限制(包括使用const_cast
或上面链接中建议的解决方案),但我建议谨慎进行。
相关文章:
- 是否应避免从非常量迭代器转换为常量迭代器?
- 如何实现常量迭代器?
- 使用迭代器替换映射中的常量项的方法
- boost_multi_index迭代器取消引用给出常量
- 是否可以重用通常的迭代器来构建常量迭代器?
- 使用 declval 获取非常量迭代器
- 为什么在此代码中隐式转换为常量迭代器失败?
- const_iterator<T>和迭代器<常量T>有什么区别?
- 常量迭代器的问题
- 链表常量迭代器
- 输入迭代器必须具有常量解引用运算符吗
- 属性树常量迭代器的索引
- 递增常量前向迭代器
- C++中非常量列表迭代器的奇怪行为
- 如何正确地声明从非常量迭代器到指针的常量指针
- 列表的迭代器可以返回非常量引用吗?
- 无法取消引用映射常量迭代器的mapped_type
- 强制 foreach 使用常量迭代器
- 为什么这个迭代器常量
- std::设置迭代器常量限定符