0

私はC++にかなり慣れていないので、これに対する答えが明白である場合はお詫び申し上げます。

私は自分のスキルを向上させる方法として、STLスタイルのカスタムデータ構造を作成してきました。(私は実際にはこの構造も実際に必要ですが、研究目的で少し船外に出ます。)

この構造は(ベクトルのように)動的にサイズ変更する必要があります。最初のドラフトでは、基になる「コンテナー」をCスタイルの配列にし、すべての割り当てと割り当て解除を手動で行いました。私はリファクタリングを行っています。コードを少しすっきりさせるために、基礎となる構造としてC++11スタイルのstd::arrayを使用したいと思います。私の問題は、サイズ変更を可能にする方法で配列クラスのメンバーを宣言する方法がわからないことです。テンプレートパラメータが異なればタイプも異なるため、メンバーを配列として宣言し、サイズ変更時に同じ変数を配列に割り当てることはできません。

潜在的なサイズごとにメンバーを宣言することを考えました。

private:
    array<T, 8>
    array<T, 16>
    array<T, 32>
    ...

しかし、これらの配列のそれぞれがデフォルトでTメンバーを構成することは望ましくありません。

ここにクリーンな解決策はありますか?それとも、Cスタイルの配列に固執する必要がありますか?

助けてくれてありがとう。

編集:

私の質問を読み直した後、実際には意味がないと思います。std :: arrayのサイズはコンパイル時に知る必要があることを理解しましたが、何らかの理由で私の脳は私の目標が不可能であると推測しました。私がCスタイルの配列とヒープで立ち往生していることは今では明らかなようです。完全に明確にするために、それを書き出す必要があったと思います。

回答ありがとうございます。

4

3 に答える 3

5

std::arrayサイズが静的に(つまりコンパイル時に)既知である配列を表すため、サイズが実行時にのみ認識されるこのような場合には使用できません。

std::vector代わりに使用するだけで、サイズを引数として取るコンストラクターがあります。

于 2013-02-07T16:36:06.397 に答える
1

std::arrayサイズ変更できないように特別に設計されています。これは主に、固定サイズの配列がファーストクラスの値型ではないという事実の回避策です。

于 2013-02-07T16:36:32.557 に答える
1

私が考えることができる唯一のユースケースは、動的にサイズ設定されたコンポーネントがある、ある種の外部化またはシリアル化されたオブジェクト(ディスクに保存されるか、ソケットを介して配信されるか、またはそれらの線に沿ったもの)です。そのためにすでにフォーマットが定義されている場合は、おそらくあなたが持っているものに固執する必要があります。std::array<>コンパイル時にサイズがわからない場合、これを再利用しようとしても機能しません。

リファクタリングが必要な場合は、コンストラクター引数としてC配列を受け取ることができるが、それにSTLコンテナーインターフェイスを提供できるテンプレートクラスが役立つ可能性があります。

于 2013-02-07T17:01:43.287 に答える