Я пытаюсь создать шаблон функции, который ищет лучший ход для любой игры - конечно, пользователь этого шаблона функции должен реализовать некоторые специфические функции игры. Я пытаюсь обобщить алгоритм альфа-бета-поиска с шаблоном функции.Generic Alpha Beta Search with C++
Декларация этого шаблона функции выглядит следующим образом:
template<class GameState, class Move,
class EndGame, class Evaluate, class GetMoves, class MakeMove)
int alphaBetaMax(GameState g, int alpha, int beta, int depthleft);
Среди других вещей, функция должна:
- Определить, если игра закончилась:
bool EndGame(g)
- Оценка состояния игра:
int Evaluate(g)
- Получить возможные ходы:
std::vector<Move> moves = GetMoves(g)
- Двигайся:
Gamestate gnew = MakeMove(g, moves[i])
Как вы думаете, функция должна много аргументов шаблона? Есть ли способ, чтобы уменьшить количество аргументов? Одна из идей состоит в том, чтобы расширить класс GameState с помощью членов , которые оценивают игру gamestate или решают, закончилась ли игра. Но дерево поиска альфа-бета содержит много экземпляров Gamestate, что может привести к ненужным потребностям в памяти , поэтому мне нравится держать Gamestate маленьким. В общем, правильный ли шаблон функции?
Я спонтанно ужасаюсь функцией шаблона, требующей шести разных классов, но я заинтригован ответами на это так +1.:) –