|
|
1
5
您可以定义一个抽象接口,如game_traits,并为每个游戏提供专门的game_traits实现:
请参阅C++标准库中的字符特征。
不幸的是,这些概念已被推迟到标准的未来版本,并且尚未出现在c++0x中:( |
|
|
2
2
就我所能理解的观点而言,我会将一些事情进行汇总:
我故意将特质和政策区分为不同的类型。正如Boost的 Generic Programming Techniques ,特征通常携带类型信息,即类型属性的描述。这个想法非常适合携带静态信息,一种游戏状态。策略提供行为-MakeMove是游戏动态行为算法的一部分。
|
|
|
3
2
向类添加方法不会使该类的对象变大。这些方法为整个类存储一次,并由对任何实例的调用使用。因此,将函数添加到GameState类不会导致算法需要更多内存。
然后,函数模板只需要一个参数
更灵活的方法是在算法中简单地使用自由函数:
在这里
仅当模板被实例化时,这些函数的重载才需要可用,以适合它们在模板中的使用方式:
通过这种方式,您可以使任何游戏状态对象适应您的算法,而无需对这些对象使用特殊方法。为了避免这些新函数污染全局名称空间,可以将它们放入它们自己的名称空间或traits类中。 因此,基本上您可以省略其他模板参数,只要在实例化模板后定义了正确名称和类型的函数。 |
|
4
1
函数本身会删除除gamestate之外的所有指针(我假设这就是函数返回结果的地方,其他的都是临时的?)。 现在做这一切更好的方法是只通过一个可以做任何事情的类,因为“makemove”,“getmove”,“evaluate”,它们都是相同逻辑的一部分。没有理由做5个不同的类,C++允许你重写类中的一个以上的虚拟函数。 |
|
|
5
1
太多了为什么它是一个模板呢?这正是使用模板时需要注意的那种“用无限的锤子敲钉子”。特别是像人工智能这样的东西,大多数问题在很大程度上难以解决,性能至关重要。 |
|
6
0
方法 成员 )在gamestate类中,因此不占用额外的每个实例内存?只是问。。。 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 1 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 1 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 1 年前 |