C++ 迭代围绕列表的类

问题描述 投票:0回答:1

抱歉标题这么糟糕,但我不知道如何浓缩我想说的内容。不管怎样,我有一个包含列表的模板类,像这样简单:

template<typename T>
class MyWrapper {
    std::list<T> items;
}

我希望能够在 foreach 循环中使用这个包装器。由于我的类只是包装一个列表(即它不是真正的自定义集合),我想我可以将该列表的迭代器函数用作我自己的迭代器函数:

typename _Container::iterator begin () noexcept {
    return items.begin();
}

typename _Container::iterator end () noexcept {
    return items.end();
}

typename _Container::const_iterator cbegin () const noexcept {
    return items.cbegin();
}

typename _Container::const_iterator cend () const noexcept {
    return items.cend();
}

这对于我的类的非常量实例化效果很好,但不适用于常量实例化。示例:

// this one works fine and iterates the inner list as you'd expect.
MyWrapper& mywr = someMethod(); // returns MyWrapper&
for (auto& el : mywr) {
    //...
}

// this one won't compile
const MyWrapper& myconst = someConstMethod(); // returns const MyWrapper&
for (const auto& el : myconst) {
    //...
}

给出的错误是“没有函数“MyWrapper::begin”的实例与参数列表和对象匹配(该对象具有阻止匹配的类型限定符)-对象类型是:const MyWrapper”。

由于这应该是一个非常常见的用例,我确信有一个页面准确地指定了要实现哪些方法来实现此功能,但到目前为止我还没有找到它。

c++ iterator stdlist
1个回答
0
投票

因为我没有声誉来发表评论。
我想问为什么不继承list类呢?因此,列表类中的所有函数都可以在包装器中使用。

© www.soinside.com 2019 - 2024. All rights reserved.