2011-02-24 58 views
4

当我定义自己的容器,我必须提供成员类型的十几个,例如:产生部件类型的容器

typedef T& reference; 
    typedef const T& const_reference; 
    typedef T* iterator; 
    typedef const T* const_iterator; 
    typedef std::size_t size_type; 
    typedef std::ptrdiff_t difference_type; 
    typedef T value_type; 
    typedef T* pointer; 
    typedef const T* const_pointer; 
    typedef std::reverse_iterator<iterator> reverse_iterator; 
    typedef std::reverse_iterator<const_iterator> const_reverse_iterator; 

有一个基类的模板,我可以继承,类似于std::iterator<T>为我自己的迭代器?

回答

0

是否有我可以继承的基类模板,类似于我自己的迭代器的std::iterator<T>

没有,但它是一个不错的主意。 OTOH,这将使其更难指这些类型从容器内,因为他们会在基类依赖于派生类的模板参数标识符。这可能会成为一个麻烦。

+0

对于“OTOH”部分:宏来救援! – rafak 2011-02-24 22:27:34

1

,那么我想你可以创建一个

template<typename T> 
struct container 
{ 
    typedef T& reference; 
    typedef const T& const_reference; 
    typedef std::size_t size_type; 
    typedef std::ptrdiff_t difference_type; 
    typedef T value_type; 
    typedef T* pointer; 
    typedef const T* const_pointer; 
}; 

而从这个继承。在标准库,std::allocator并定义所有这些类型定义,因此从它继承在技术上做你想要的东西,不应该强加任何运行时开销。我仍然认为这是最好只写自己的typedef,虽然。

相关问题