c++ - 派生类中的 typedef 未知

标签 c++ templates inheritance typedef

我正在尝试编写一个容器适配器。我也想在派生类中使用基类的类型定义。所以我尝试了以下...

template <class CONTAINER> class SequenceComposite {
protected:
    CONTAINER m_data;
public:
    typedef typename CONTAINER::size_type size_type;
    // ...
};

template <class DTYPE>
class VectorComposite : public virtual SequenceComposite< std::vector<DTYPE> > {
public:
    size_type capacity() const { m_data.capacity(); }
    // ...
};

我收到这个错误...

error: ‘size_type’ does not name a type  
note: (perhaps ‘typename SequenceComposite<std::vector<T> >::size_type’ was intended) // yes, it was

如何告诉编译器我想使用基类中的 typedef?

最佳答案

我能够让它工作,这里有一篇关于 Dependent name lookup for C++ templates 的好文章和 this介绍了如何解决 m_data 的问题:

template <class DTYPE>
class VectorComposite : public virtual SequenceComposite< std::vector<DTYPE> >     
{
public:
     typedef typename SequenceComposite< std::vector<DTYPE> >::size_type size_type ;

     size_type capacity() const
        {
          this->m_data.capacity() ;
        }
    // ...
};

或者你也可以使用using:

using typename SequenceComposite< std::vector<DTYPE> >::size_type ;

虽然我不认为这会使它变得更好,jrok 提出了一个更好的解决方案:

 typename VectorComposite::size_type capacity() const
 {
    this->m_data.capacity() ;
 }

关于c++ - 派生类中的 typedef 未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15339145/

相关文章:

c++ - 可变的不区分大小写的字符串比较性能

c++ - 缓存函数结果,包括 maybe void

c++ - 为什么不支持从 template<typename T1, typename T2> 到 template<typename T1, int i> 的类特化

c++ - 指向基类的指针总是 <= 指向派生类的指针吗?

java - 当返回类型为 List 时,无法覆盖父类(super class)中的方法

c++ - SFINAE : Know if a function already exist or no

c++ - 与部分阵列作斗争

c++ - 为什么迭代器调试在调试版本中会减慢 std::unordered_map 200x?

C++ 输入输出排序

c++ - 查找基类/父类(super class)成员的实现