【发布时间】:2021-09-05 09:40:16
【问题描述】:
考虑这个例子:
template <typename T> struct A {
using Iter = typename T::iterator;
Iter iter;
A(T& cont) {
iter = cont.begin();
}
typename Iter::reference value() { return *iter; }
};
void f(std::vector<int>& v) {
A a(v);
a.value() = 10;
}
它工作正常,如果你将const添加到容器类型中,它就不再编译了!
int g(const std::vector<int>& v) {
A a(v); // ERROR
return a.value();
}
如何定义迭代器类型,它将与 const/non-const 容器类型一起编译。 我需要这样的东西:
using Iter = decltype(T::begin());
【问题讨论】:
-
你在用这个迭代器做什么?你要修改它指向的东西吗?如果没有,只需使用
T::const_iterator并始终获取 const 的迭代器。 -
如果容器不是 const,迭代器必须允许修改
-
@NathanOliver 我编辑了帖子