无法将非常量左值引用绑定到右值

时间:2018-04-12 17:32:01

标签: c++

我厌倦了编写一对迭代器并创建一个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);  
}

0 个答案:

没有答案