クラス内に選択可能な名前空間のような機能を実装するにはどうすればよいですか?

ハッフル

チェスエンジンのクラスを作成しています。このクラスには、各ピースの場所、許可される移動などに関する情報が含まれています。このクラスでは、新しいオブジェクトを作成しなくても、移動をシミュレートすることもできます。現在の実装は次のようになります。

// in header file
class ChessGame{
    int base_var1; // base indicates real game value
    int test_var1; // test indicates simulated game value
    ... many other vars of various types

    void makeRealMove(int move); // modifies base values
    void makeTestMove(int move); // modifies test values
}

// in src file
void ChessGame::makeRealMove(int move){
    base_var1 = move; // lots of code in here
}

void ChessGame::makeTestMove(int move){
    test_var1 = move; // identical code here
}

これは機能しますが、makeRealMoveとmakeTestMoveのコードはまったく同じで、各test_varを適切なbase_varと交換するだけです。私がやりたいのは、変更する適切なタイプの変数を動的に選択できる1つの関数makeMoveを用意することです。これにより、本質的に冗長なコードが削除され、デバッグが容易になります。名前空間がクラス内で許可され、条件付きで選択できる場合は、次のようにします。

// in header file
class ChessGame{
    namespace base { int var1; } // plus the other vars
    namespace test { int var1; } // plus the other vars

    void makeMove(int move, bool condition);
}

// in src file
void ChessGame::makeMove(int move, bool real_move){
    if(real_move) { using namespace base; }
    else { using namespace test; }
    var1 = move; // appropriate variable selected
}

残念ながら、名前空間をクラスにネストすることはできません。ネストできたとしても、この方法で2つから選択することはできませんでした。それで、この種の振る舞いを得る方法はありますか、それとも私は現在のアプローチに固執していますか?

アンゲヴァンテはもはやSOを誇りに思っていません

名前空間の代わりにクラスを使用できます。

class ChessGame{
    struct Vars {
      int var1; // plus the other vars
    };
    Vars realGame;
    Vars testGame;

    void makeMove(int move, bool condition);
    void makeMoveImpl(int move, Vars &vars);
};

void ChessGame::makeMove(int move, bool real_move) {
    if (real_move) makeMoveImpl(move, realGame);
    else makeMoveImpl(move, testGame);
}

void ChessGame::makeMoveImpl(int move, Vars &vars) {
    vars.var1 = move; // appropriate variable selected
}

設計に基づいてVars、ネストされたクラスではなくグローバルクラスを作成することが理にかなっている場合があることに注意してください(その中に2つのインスタンスを格納しますChessGame)。makeMoveImplその後、さえのメンバ関数になる可能性Varsと、ChessGameちょうど1または他の委任者として役立つであろう。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

名前空間内にクラスを作成するにはどうすればよいですか?

分類Dev

最近のUITextFieldで選択した名前に異なる色で追加する方法を実装するにはどうすればよいですか?

分類Dev

SXD-XPathで名前空間属性の値を選択するにはどうすればよいですか?

分類Dev

フラスコ内の値の選択ではなく、タグ名の選択の選択を要求するにはどうすればよいですか?

分類Dev

選択可能な配列構造体をswiftで実装するにはどうすればよいですか?

分類Dev

JAXB:異なる名前空間に属するようにクラスに注釈を付けるにはどうすればよいですか?

分類Dev

Rubyで名前空間クラスの定義を解除するにはどうすればよいですか?

分類Dev

名前空間のジョブ内でkubectlを実行するにはどうすればよいですか?

分類Dev

名前空間のC ++クラスをCythonに含めるにはどうすればよいですか?

分類Dev

Swiftクラスの名前空間を変更するにはどうすればよいですか?

分類Dev

名前空間要素内に名前空間なしの要素を定義するにはどうすればよいですか?

分類Dev

コモンリストにない名前を選択するにはどうすればよいですか?

分類Dev

C#クラスの名前空間を見つけるにはどうすればよいですか?

分類Dev

存在しない名前空間の実際にすべてのオブジェクトを一覧表示するにはどうすればよいですか?

分類Dev

カスタム名前空間にクラスを追加するにはどうすればよいですか?

分類Dev

適切なリスト実装を選択するにはどうすればよいですか?

分類Dev

C ++の名前空間内でクラスをプライベートにするにはどうすればよいですか?

分類Dev

特定のクラスしかない要素を選択するにはどうすればよいですか?

分類Dev

Windows 10でドラッグ可能なピンを作成して、場所の選択機能を提供するにはどうすればよいですか?

分類Dev

選択可能な時間で非同期タスクを複数回実行するにはどうすればよいですか?

分類Dev

クラスのない要素を選択するにはどうすればよいですか?

分類Dev

Firefox拡張機能。コンソールから「ブラウザ」名前空間にアクセスするにはどうすればよいですか?

分類Dev

Laravelのドラッグ可能な列にAJAXを実装するにはどうすればよいですか?

分類Dev

フォーム選択でアクセス可能なインラインエラーを実行するにはどうすればよいですか?

分類Dev

名前空間とクラス名をリファクタリングするようにPHPStormに指示するにはどうすればよいですか?

分類Dev

QScintillaの複数の選択で機能するコメント機能を実装するにはどうすればよいですか?

分類Dev

ビュー内の選択可能なすべての要素のフォーカスをクリアするにはどうすればよいですか?

分類Dev

同じ名前の迅速なクラスを処理するにはどうすればよいですか?

分類Dev

クラスを選択し、その内部要素を選択しないようにするにはどうすればよいですか?

Related 関連記事

  1. 1

    名前空間内にクラスを作成するにはどうすればよいですか?

  2. 2

    最近のUITextFieldで選択した名前に異なる色で追加する方法を実装するにはどうすればよいですか?

  3. 3

    SXD-XPathで名前空間属性の値を選択するにはどうすればよいですか?

  4. 4

    フラスコ内の値の選択ではなく、タグ名の選択の選択を要求するにはどうすればよいですか?

  5. 5

    選択可能な配列構造体をswiftで実装するにはどうすればよいですか?

  6. 6

    JAXB:異なる名前空間に属するようにクラスに注釈を付けるにはどうすればよいですか?

  7. 7

    Rubyで名前空間クラスの定義を解除するにはどうすればよいですか?

  8. 8

    名前空間のジョブ内でkubectlを実行するにはどうすればよいですか?

  9. 9

    名前空間のC ++クラスをCythonに含めるにはどうすればよいですか?

  10. 10

    Swiftクラスの名前空間を変更するにはどうすればよいですか?

  11. 11

    名前空間要素内に名前空間なしの要素を定義するにはどうすればよいですか?

  12. 12

    コモンリストにない名前を選択するにはどうすればよいですか?

  13. 13

    C#クラスの名前空間を見つけるにはどうすればよいですか?

  14. 14

    存在しない名前空間の実際にすべてのオブジェクトを一覧表示するにはどうすればよいですか?

  15. 15

    カスタム名前空間にクラスを追加するにはどうすればよいですか?

  16. 16

    適切なリスト実装を選択するにはどうすればよいですか?

  17. 17

    C ++の名前空間内でクラスをプライベートにするにはどうすればよいですか?

  18. 18

    特定のクラスしかない要素を選択するにはどうすればよいですか?

  19. 19

    Windows 10でドラッグ可能なピンを作成して、場所の選択機能を提供するにはどうすればよいですか?

  20. 20

    選択可能な時間で非同期タスクを複数回実行するにはどうすればよいですか?

  21. 21

    クラスのない要素を選択するにはどうすればよいですか?

  22. 22

    Firefox拡張機能。コンソールから「ブラウザ」名前空間にアクセスするにはどうすればよいですか?

  23. 23

    Laravelのドラッグ可能な列にAJAXを実装するにはどうすればよいですか?

  24. 24

    フォーム選択でアクセス可能なインラインエラーを実行するにはどうすればよいですか?

  25. 25

    名前空間とクラス名をリファクタリングするようにPHPStormに指示するにはどうすればよいですか?

  26. 26

    QScintillaの複数の選択で機能するコメント機能を実装するにはどうすればよいですか?

  27. 27

    ビュー内の選択可能なすべての要素のフォーカスをクリアするにはどうすればよいですか?

  28. 28

    同じ名前の迅速なクラスを処理するにはどうすればよいですか?

  29. 29

    クラスを選択し、その内部要素を選択しないようにするにはどうすればよいですか?

ホットタグ

アーカイブ