私は長い間C++について勉強していましたが、まだほとんど書いていません。だから、現代的なC++の練習については十分に知っているにもかかわらず、私はまだ良いデザインパターンを持っていません。このテンプレートをデザインに反映させないでください。
ここに問題があります:ゲームボード(チェス、ゴーなど)を表すクラスBoard
があるとします。このボードの基礎となるストレージはstd::array
です。
はBoard
を所有し、スコアを保ち、ゲームのルールを実行しているを担当している別のクラスGameRunner
など
ゲームボードは、ユーザーによって定義された大きさを持ってあります。私の頭の中で、GameRunnerは単にGameRunner::GameRunner(unsigned size)
と宣言され、size
のパラメータも同様にボードに渡され、それはBoard::Board(unsigned size)
と宣言されています。
std::array
は、静的に決定されたサイズでなければならないという問題があります。だから私はstd::array
というメンバ変数を持つことはできません。コンパイル時にサイズが分からないからです。私はstd::unique_ptr
をメンバーとして作成し、そのポイントを動的に作成された配列にすることができると思ったが、もちろんstd::unique_ptr<std::array<???????>>
を定義する必要がある。疑問符はどうしてこの配列のサイズがわからないのかを示す。
私の解決策は、ボードにサイズを渡すテンプレートがあるようにすることでした。だからにはBoard<size>
がありますが、GameRunnerにもテンプレートが必要なので、テンプレートがすべてダウンしています...
ここで私は何をしますか?テンプレートは一番下にありますか?サイズは変わらないはずですが、可変サイズのコンテナを使用しますか?信じられないくらい些細なものがあるように感じます。
あなたはボードにベクトルサイズを持たせることができます...簡単なコードと時間の短縮のためにランタイム速度差を測定する –