提问者:小点点

在嵌套类中使用模板值


我有以下类定义:

template <int B>
class SparseBitvector
{
    typedef typename std::vector<std::bitset<B>> BitsetVector;

public:
    class iterator: public std::iterator<...>
    {
        public:
            explicit iterator(..., BitsetVector::iterator* _chunksIt, ...) {...}
    }
}

在编译时,我得到以下错误:

/project/powerset/src/powerset/sparse_bitvector.h:96:125: error: 'std::BitsetVector<std::bitset<(long unsigned int)B>, std::allocator<std::bitset<(long unsigned int)B> > >::iterator' is not a type
         explicit iterator(SortedStaticSet<EHRule> *_offsets, std::vector<std::bitset<B>> *_chunks, SetElement* _offssetsIt, BitsetVector::iterator* _chunksIt, int _indInBitset)

是否允许在嵌套类中使用模板值?

如果没有,我是否犯了其他错误?


共1个答案

匿名用户

需要对依赖类型使用typeName关键字。 例如,这里

typename BitsetVector::iterator* _chunksIt
//^^^^^^

其次,模板类型别名不需要typename

typedef std::vector<std::bitset<B>> BitsetVector;
// or better use
// using BitsetVector = std::vector<std::bitset<B>>;

上述最小示例考虑如下:

#include <vector>
#include <iterator>
#include <bitset>

template <int B>
class SparseBitvector
{
   typedef std::vector<std::bitset<B>> BitsetVector;

public:
   class iterator : public std::iterator<std::input_iterator_tag, BitsetVector>
   {
   public:
      explicit iterator(std::input_iterator_tag, BitsetVector, typename BitsetVector::iterator* _chunksIt)
      {
      }
   };
};