gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:31:31 26 4
gpt4 key购买 nike

我想使用 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’)

这里有什么问题?

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
};

最佳答案

您想直接使用 View 的名称,而不是它们的底层实现细节。 View 的名称分别是allconst_:

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

另请注意,在您的 const 成员函数中,您不需要 const_ View ,因为 m_container 已经是 const-限定。你只需要all:

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

或者,正如 Casey 所建议的,以正常方式做事更直接和可读:

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

关于c++ - 编译 range-v3 const 方法时出现编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45651215/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com