我厌倦了编写一对迭代器并创建一个View
类。
除非我删除make_range
构造函数,否则我不明白为什么View(View<C>& r)
函数不起作用。
但这没有意义。 make_range
函数不使用该构造函数。
代码也位于https://godbolt.org/g/75sWPf
感谢。
测试:
#include <vector>
template<typename C>
class View {
public:
typedef typename C::iterator iterator;
View(C& c, iterator begin, iterator end) :
_c(c) {
_begin = c.begin();
_end = c.end();
}
// Remove a constructor
// View(View<C>& r) : _c(r._c) {
// _begin = r._begin;
// _end = r._end;
// }
private:
C& _c;
iterator _begin;
iterator _end;
};
template<typename T, typename A>
View<std::vector<T, A> > make_view(std::vector<T, A>& v) {
View<std::vector<T, A> > a(v, v.begin(), v.end());
return a;
};
int main() {
std::vector<int> a;
for (int i = 0; i < 5; ++i) a.push_back(i);
View<std::vector<int>> b(a, a.begin(), a.end());
// this works.
// View<std::vector<int>> c(b);
// doesn't work unless I remove constructor.
auto d = make_view(a);
}