首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译range-v3常量方法时出现编译器错误

编译range-v3常量方法时出现编译器错误
EN

Stack Overflow用户
提问于 2017-08-12 22:12:26
回答 1查看 83关注 0票数 2

我想使用range-v3库来提供对容器的访问--类的成员。应该有一个可变的以及const访问。但是,编译下面的类会导致编译器错误。如果我注释掉const方法,编译器没有什么可抱怨的:

代码语言:javascript
复制
error: no match for ‘operator|’ (operand types are ‘const std::vector<SomeType> {aka const std::vector<SomeType, std::allocator<SomeType> >}’ and ‘ranges::v3::view::const_fn’)

这里的问题是什么?

代码语言:javascript
复制
class A
{
public:
    auto all() {
        return m_container
                | ranges::view::all_fn();
    }

    const auto all() const {
        return m_container
                | ranges::view::const_fn();
    }

private:
 std::vector<SomeType> m_container 
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-12 22:23:08

您希望直接使用视图的名称,而不是它们的底层实现细节。视图的名称分别为allconst_

代码语言:javascript
复制
auto all()       { return m_container | ranges::view::all; }
auto all() const { return m_container | ranges::view::const_; }

还要注意,在const成员函数中,您不需要const_视图,因为m_container已经是const-qualified了。你所需要的就是all

代码语言:javascript
复制
auto all()       { return m_container | ranges::view::all; }
auto all() const { return m_container | ranges::view::all; }

或者,就像Casey建议的那样,只是用正常的方式做事情更直接,更容易阅读:

代码语言:javascript
复制
auto all()       { return ranges::view::all(m_container); }
auto all() const { return ranges::view::all(m_container); }   
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45651215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档