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_容器)代码>比在此上下文中使用管道操作符更具可读性。