错误:使用 Boost 的 iterator_facade 时,“std::iterator_traits”中没有名为“value_type”的类型

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

我正在使用 Boost 1.84 和 C++17,并且创建了一个继承自 boost::iterator_facade 的 polymorphic_iterator 类。这是我的课程的简化版本:

namespace iterator {

template <typename TValue,
    typename TCategory,
    typename TRef = TValue &,
    typename TDiff = std::ptrdiff_t>
class polymorphic_iterator : public boost::iterator_facade<
    polymorphic_iterator<TValue, TCategory, TRef, TDiff>,
    TValue,
    TCategory,
    TRef,
    TDiff>
{
public:
    polymorphic_iterator() {}

    template <typename TIter> polymorphic_iterator(TIter iter)
    // ...
};

} // namespace iterator

当我尝试在单元测试中使用此迭代器时,出现以下错误:

error: no type named 'value_type' in 'std::iterator_traits<iterator::polymorphic_iterator<const char, boost::iterators::incrementable_traversal_tag>>'

我认为 boost::iterator_facade 将为 std::iterator_traits 提供必要的特征。为什么我会收到此错误以及如何修复它?

对于上下文,这就是我在单元测试中制作迭代器的方式:

iterator::polymorphic_iterator<const char, boost::incrementable_traversal_tag> iter; 

我尝试显式定义 value_type

using value_type = TValue;

我考虑过扔掉这个恶心的东西,但它不是我的代码,而且它的耦合性很强。

c++ boost iterator-traits iterator-facade
1个回答
0
投票

是的,

boost::iterator_facade
定义了
value_type
,但它在
boost::iterator_facade
名称解析范围内。您可以将其带入
polymorphic_iterator
名称解析范围。

 public:
  using boost::iterator_facade<
      polymorphic_iterator<TValue, TCategory, TRef, TDiff>, TValue, TCategory,
      TRef, TDiff>::value_type;

  polymorphic_iterator() {}
© www.soinside.com 2019 - 2024. All rights reserved.