コンパイル時にサイズがわかっている配列が必要です。私はstd :: vectorまたはboost :: arrayを使用できることを知っています。しかし、それは私が内部的にどのように働くか教えていません。また、イニシャライザを使用する以外に、boost :: arrayにアイテムを追加する方法が見つかりませんでした。私はジェネリック配列のために次のコードを書いています。私の意図は後など、イテレータに慣れるためにテンプレート特殊である上記のコードはうまく動作するコードイテレータをサポートする一般的な固定サイズの配列を実装する
template<typename T>
struct iterator_traits
{
typedef T value_type;
typedef T& reference_type;
typedef T* iterator;
typedef const T* const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
};
template<typename T>
struct iterator_traits<T*>
{
typedef T* value_type;
typedef T*& reference_type;
typedef T** iterator;
typedef const T const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
};
template<typename T, size_t size = 10>
class Array
{
public:
typedef typename iterator_traits<T>::value_type value_type;
typedef typename iterator_traits<T>::reference_type reference_type;
typedef typename iterator_traits<T>::iterator iterator;
typedef typename iterator_traits<T>::const_iterator const_iterator;
typedef typename iterator_traits<T>::reverse_iterator reverse_iterator;
Array() : lastIndex(0) {
}
void add(value_type element) {
if(lastIndex >= size)
throw std::out_of_range("Array is full");
array_[lastIndex++] = element;
}
reference_type at(unsigned int index){
if(index < size)
return array_[index];
else
throw std::out_of_range("Invalid index");
}
size_t capacity(){
return size;
}
iterator begin(){
return array_;
}
iterator end(){
return array_ + size;
}
const_iterator begin() const{
return array_;
}
const_iterator end() const{
return array_ + size;
}
reverse_iterator rbegin() {
return reverse_iterator(end());
}
reverse_iterator rend() {
return reverse_iterator(begin());
}
private:
value_type array_[size];
unsigned int lastIndex;
};
です。以下は私の質問です
1 - boost :: arrayのような配列を作成するにはどうしたらいいですか?何かのように
Array<int> ints = { 10, 12 };
2 - コードに落とし穴がありますか?
3 - 私は、形質のポインタ型のための特殊化を使用しなければなりませんでした。それがベストプラクティスですか?
4 - イテレータパターンが正しく実装されているかどうかを確認します。
どのような考えもすばらしいでしょう!
std :: iterator_traits(#include)は既にポインタ用に特化されていますので、独自のポインタを用意する必要はありません。 –
ブーストに何も追加できないという意味はどうですか?配列ですか? – GManNickG