10

std::array<T, ?>タイプ(サイズが未定義)のテンプレートクラスAClassのメンバー変数を宣言して設定するにはどうすればよいですか?実際std::arrayはコンストラクターで作成されます。配列のサイズはコンストラクターパラメーターです。

疑似C++コードの場合:

template <typename T> class AClass {

protected:
    std::array<T, ?>* array;

public:

    AClass(int n) {
        this->array = new std::array<T, n>;
    }

}

正しいコードはどのように見えますか?

4

4 に答える 4

14

std::arrayそのために使用しないでください、使用してくださいstd::vector。のサイズはstd::arrayコンパイル時定数でなければなりません。コンストラクターで渡したい場合は、を使用する必要がありますstd::vector

于 2012-12-18T14:50:40.773 に答える
9

実際std::arrayはコンストラクターで作成されます。配列のサイズはコンストラクターパラメーターです。

のサイズはstd::arrayコンパイル時に認識されている必要がありますが、あなたの場合はそうではありません。

これには使用する必要がありますstd::vector

于 2012-12-18T14:50:59.417 に答える
4

実行時にサイズが実際に定義される場所を使用std::vectorする以外に、コンパイル時にサイズを指定して(たとえば、問題に応じて可能な最大値に)、テンプレートパラメーターをクラスのクライアントに「伝播」することもできます。

template <typename T, std::size_t n> 
class AClass {
   protected:
       std::array<T, n> array;
   public:
       AClass() {
           // nothing to do
       }
}

次に、次のように使用します。

AClass<int, 5> myAClass;
于 2012-12-18T14:53:20.027 に答える
2

あなたはstd::array未定義のサイズを持つことはできません。またはの代わりに
使用してください。std::unique_ptr<T[]>std::vector

于 2012-12-18T14:55:43.613 に答える