TicTacToe、Othello、Checkersなどの複数のターンベースのゲームをプレイするJavaのアルゴリズムは、ジェネリックス(自己境界型)は、ゲームごとに特別に変更することなく、同じアルゴリズムを使用できるようにします。自己境界型を使用する理由はここでは示されていませんが、評価関数には必要です。Javaジェネリックスと同等の機能を実装する方法C++テンプレート内の自己バインド型
public interface Game<GAME extends Game<GAME>> {
GAME copy();
int getCurPlayer();
...
}
public class TicTacToe implements Game<TicTacToe> {
...
@Override
public TicTacToe copy() {
...
}
@Override
public int getCurPlayer() {
...
}
...
}
今日、学習のために、C++テンプレートを使用してJavaコードをC++に移動しようとしました。
これは私のアプローチであり、明らかに動作しませんでした。
Game.h
template <typename T>
class Game
{
public:
virtual T copy() const = 0;
virtual int cur_player() const = 0;
...
};
TicTacToe.h
class TicTacToe : public Game<TicTacToe>
{
public:
virtual TicTacToe copy() const;
virtual int cur_player() const;
...
};
TicTacToe.cpp
TicTacToe TicTacToe::copy() {
...
}
int TicTacToe::cur_player() {
...
}
私がコンパイルしようとすると、私が得るエラーは以下のとおりです。
out-of-line definition of 'copy' does not match any declaration in 'TicTacToe'
out-of-line definition of 'cur_player' does not match any declaration in 'TicTacToe'
... など、その他の純粋仮想関数のそれぞれについて同じです。
動作しなかったことは決して言わないでください。 – Puppy
それがうまくいかない理由は明白ではありません。あなたが抱えている問題は何ですか?(コンパイルエラー?) – antlersoft
Javaでは「自己境界型」を使用していません。あなたのコードは 'public interface Game' –
newacct