3

基になる C 配列にアクセスするときにインデックスを制御するセーフ配列クラスを実装する必要があります。

template <typename T, int N> class SafeArray
{
public:
    T &operator[](int index)
    {
        assert(0 <= index && index < N);
        return m_data[index];
    }
private:
    T m_data[N];
};

そして、代わりにbool a[3];、今私は書きSafeArray<bool, 3> a;ます。

のような配列の初期化をサポートするにはどうすればよいbool b[3] = {false};ですか? が構築されb.m_data[] = {false, false, false}た後に取得するにはどうすればよいですか?SafeArray<bool, 3> b;

にコンストラクターを追加する必要があると思いSafeArrayますが、そのコンストラクターの本体は何でしょうか? テンプレート パラメーターTは何でもかまいませんが、必ずしも ではありませんbool。私はpre-C++11を使用しています。

4

3 に答える 3

0

あなたは C++03 を使用しているので (したがって を持っていません) 、基本的には の C++03 実装をstd::arrayお勧めします。(実際には、に触発されました)。boost::arraystd::arraystd::arrayboost::array

それ以外の場合は、クラスを集約にします (C++03 8.5.1/1 による)。

集合体は配列またはクラス (節 9) であり、ユーザーが宣言したコンストラクター、プライベートな保護された非静的データ メンバー (節 11)、基本クラス (節 10)、および仮想関数はありません。

次に、クラスは必要に応じて集計の初期化をサポートします。

更新: OP (およびAndy Prowl回答) をもう一度読むと、質問を理解しているかどうかわかりません。ここで提案するのは、SafeArray構築時に初期化する方法です。たとえば、

SafeArray<bool, 3> b = { false, false, false };
于 2013-06-21T10:37:21.480 に答える