Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译range-v3 const方法时出现编译器错误_C++_C++17_Range V3 - Fatal编程技术网

C++ 编译range-v3 const方法时出现编译器错误

C++ 编译range-v3 const方法时出现编译器错误,c++,c++17,range-v3,C++,C++17,Range V3,我想使用range-v3库提供对类的容器成员的访问。应该有一个可变以及const访问。 但是,编译下面的类会导致编译器错误。如果我将const方法注释掉,编译器没有什么可抱怨的: error: no match for ‘operator|’ (operand types are ‘const std::vector<SomeType> {aka const std::vector<SomeType, std::allocator<SomeType> >}’

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

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’)
错误:与“运算符|”不匹配(操作数类型为“const std::vector{aka const std::vector}”和“ranges::v3::view::const|fn”)
这里有什么问题

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 
};
A类
{
公众:
自动全部(){
退货集装箱
|ranges::view::all_fn();
}
常量auto all()常量{
退货集装箱
|范围::视图::常数fn();
}
私人:
向量m_容器
};

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

auto all()       { return m_container | ranges::view::all; }
auto all() const { return m_container | ranges::view::const_; }
还请注意,在
const
成员函数中,您不需要
const
视图,因为
m\u容器
已经是
const
限定的。您只需要
全部

auto all()       { return m_container | ranges::view::all; }
auto all() const { return m_container | ranges::view::all; }
或者,正如建议的那样,仅仅以正常的方式做事更直接、更具可读性:

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

我认为
返回范围::视图::全部(m_容器)比在此上下文中使用管道操作符更具可读性。