我将尝试设计一个函数模板,用于搜索任何游戏的最佳移动方式 - 当然,这个函数模板的用户必须实现一些特定于游戏的函数。我正在尝试使用函数模板来概括alpha-beta搜索算法。
这个函数模板的声明如下:
这个函数模板的声明如下:
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类,以评估游戏状态或决定游戏是否已结束。但是,alpha-beta搜索树包含许多Gamestate实例,这可能导致不必要的内存需求,因此我希望保持Gamestate的小型化。总的来说,函数模板是否真的是正确的方法?