小编Zze*_*etT的帖子

使用C++模板的Builder模式

我有一个高度可配置的类,有许多模板参数,如下所示:

template<bool OptionA = false, bool OptionB = false, bool OptionC = false, class T = Class1B>
class MyClass
{
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我想创建类类型并且我只想将OptionB设置为true,我必须执行以下操作:

MyClass<false, true>

特别是对于许多模板参数,这变得很麻烦.

不,我的问题是,是否有任何可用于使用构建器模式创建基于模板的类类型的示例?

我正在寻找这样的东西:

class Builder
{
    useOptionA();
    useOptionB();
    useOptionC();
    useClass2B(); //instead of Class1B
    create();
}
Run Code Online (Sandbox Code Playgroud)

最后一个Builder.useOptionB().useOptionC().useClass2B.create()应该回来的电话MyClass<false, true, true, Class2B>.这可能吗?

编辑:向模板参数列表添加了类.

c++ templates

7
推荐指数
1
解决办法
1975
查看次数

何时终止使用alpha beta修剪和转置表的迭代加深?

我怎么知道何时可以通过negamax alpha beta修剪和转置表来停止增加迭代加深算法的深度?以下从wiki页面获取的伪代码:

function negamax(node, depth, ?, ?, color)
 alphaOrig := ?

 // Transposition Table Lookup; node is the lookup key for ttEntry
 ttEntry := TranspositionTableLookup( node )
 if ttEntry is valid and ttEntry.depth ? depth
     if ttEntry.Flag = EXACT
         return ttEntry.Value
     else if ttEntry.Flag = LOWERBOUND
         ? := max( ?, ttEntry.Value)
     else if ttEntry.Flag = UPPERBOUND
         ? := min( ?, ttEntry.Value)
     endif
     if ? ? ?
         return ttEntry.Value
 endif

 if depth = 0 or node is a terminal …
Run Code Online (Sandbox Code Playgroud)

algorithm artificial-intelligence alpha-beta-pruning

1
推荐指数
1
解决办法
1964
查看次数