2016-11-27 9 views
1

背景を作成する方法:私は、私は私のコードベースから実装を分離することができますSTLコンテナのために私自身のラッパークラスのいくつかを作成しようとしているのstd ::配列のラッパークラスに

。私はまだのように私のVectorクラスのラッパーでalittleがビットを行っている:私はコンストラクタを設定している、

Vector.h

template<typename type> 
    class Vector 
    { 
    public: 
     Vector(); 
     Vector(std::initializer_list<type> initializer); 
     Vector(int size, int defaultValue); 
     Vector(int size); 
     ~Vector(); 

     void PushBack(type itemToPushBack); 
     type AtPosition(int position); 

    private: 
     std::vector<type> m_collectionOfItems; 
    }; 

あなたが見ることができるように、私はメンバーとしてstd::vectorを使用しました私ができるように、私自身のVectorクラス内でstd :: vector関数を呼び出すだけです。

問題:任意のオブジェクトをインスタンス化するとき、私はすぐにサイズをspecificyする必要がstd::array

。したがって、私がベクトルクラスで行ったようにメンバ変数を作成した場合、その配列オブジェクトにサイズを与える必要があります。私はむしろ、サイズ(例えば、MyArrayClass myArray(10))をVectorに設定した同様のコンストラクタを使用して、ユーザーが指定するサイズを指定します。このArrayラッパーをどうやって実装しようとしますか?私はむしろサイズはベクトルの(例。MyArrayClass myarrayの(10))にいくつかの類似した コンストラクタのセットアップを使用して、ユーザによって指定されるだろう

+0

'のstd ::そのサイズはコンパイル時に指定する必要がありますので、静的配列をラップarray'に有用である場合には、次のラッパーと考えることができます。 'std :: vector'は、実行時にサイズが動的に決定される配列です。 –

+1

'std :: array'の主な点は、' std :: vector'との主な違いは、コンパイル時にサイズが決定され、動的メモリ割り当てを必要としないことです。ラップ 'std :: array'を主張する場合、ラッパーは同じプロパティを持つ必要があります。それ以外の場合は、ほとんどの点を打ち負かします。 –

+0

標準の容器は、できるだけ交換可能に設計されています。コンテナコードをコンテナ間でやりとりできるようにするために、どのような汎用関数が利用できるかを学ぶ方が時間がかかることがあります。現在の標準ライブラリ関数を使用することができない場合は、実行できない可能性があります。 – Galik

答えて

1

。どのように 私はこのArrayラッパーを実装してもよいでしょうか?

std::vectorとは異なり、std::arrayの目的は、コンパイル時にサイズが指定されていることです。基本的な構造は、コンパイル時にサイズが必要となるプレーンなバニラ配列です。

私はそれが

template <typename T, size N> 
class Array { 
    public: 
    // stuff 
    private: 
    std::array<T, N> array_; 
}; 
関連する問題