【发布时间】:2014-02-18 00:44:54
【问题描述】:
我正在参加一门课程,向我们介绍了一些软件模式,其中之一是迭代器模式,我们被要求用 C++ 实现它。几周前我们的教授给了我们一些示例代码,我想比我更好地理解它。首先我将发布代码:
template <class T_,std::size_t SIZE_>
class carray {
public:
typedef T_ value_type;
typedef std::size_t size_type;
typedef T_ & reference;
typedef T_ const & const_reference;
typedef T_ * pointer;
typedef T_ const * const_pointer;
typedef T_ * iterator;
typedef T_ const * const_iterator;
typedef std::ptrdiff_t difference_type;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
// data store
value_type data[SIZE_];
size_type size() const { return SIZE_; }
reference operator [] ( size_type idx ) { return data[idx]; }
const_reference operator [] ( size_type idx ) const { return data[idx]; }
reverse_iterator rbegin() { return reverse_iterator( end() ); }
reverse_iterator rend() { return reverse_iterator( begin() ); }
const_reverse_iterator rbegin() const { return const_reverse_iterator( end() ); }
const_reverse_iterator rend() const { return const_reverse_iterator( begin() ); }
const_reverse_iterator crbegin() const { return const_reverse_iterator( end() ); }
const_reverse_iterator crend() const { return const_reverse_iterator( begin() ); }
iterator begin() { return data; }
iterator end() { return data + SIZE_; }
const_iterator begin() const { return data; }
const_iterator end() const { return data + SIZE_; }
const_iterator cbegin() const { return data; }
const_iterator cend() const { return data + SIZE_; }
};
在这个模板中,我们的教授定义了一堆 typedef,其中一些有非常量和常量版本。首先,我想知道每个公共成员的目的是什么,其次,我想知道常量版本在定义数据结构模板的上下文中的目的是什么。
我还注意到一些成员函数被定义为“const”,我想知道这样做的目的是什么。
【问题讨论】:
标签: c++ arrays templates constants