我正在尝试编写一个容器适配器。我也想在派生类中使用基类的类型定义。所以我尝试了以下...
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/