c++ 行为树模式和调用没有分号或指针引用的成员

问题描述 投票:0回答:1

我有一个关于行为树模式中调用的这种类型的实现的快速问题。从我所看到的第一行,他们将指向对象“构建器”的指针称为“构建器”,但之后的每一行都省略了将指针对象称为“构建器”。他们还省略了“;”分号

a:这是什么类型的模式以及在哪里可以找到在这样的指针上调用成员的引用

BT::BehaviorTree* Bt=Builder
    ->ActiveSelector()
        ->Sequence()
            ->Condition(BT::EConditionMode::IsSeeEnemy,false)
                 ->Back()       
            ->ActiveSelector()
                 -> Sequence()
                      ->Condition(BT::EConditionMode::IsHealthLow,false)
                           ->Back()
                      ->Action(BT::EActionMode::Runaway)
                            ->Back()
                      ->Back()
                ->Parallel(BT::EPolicy::RequireAll, BT::EPolicy::RequireOne)
                      ->Condition(BT::EConditionMode::IsEnemyDead,true)
                            ->Back()
                      ->Action(BT::EActionMode::Attack)
                            ->Back()
                      ->Back()
               ->Back()
            ->Back()
    ->Action(BT::EActionMode::Patrol)
->End();

类的定义如下

class BehaviorTreeBuilder
{
public:
    BehaviorTreeBuilder() { }
    ~BehaviorTreeBuilder() { }
    BehaviorTreeBuilder* Sequence();
    BehaviorTreeBuilder* Action(EActionMode ActionModes);
    BehaviorTreeBuilder* Condition(EConditionMode ConditionMode, bool IsNegation);
    BehaviorTreeBuilder* Selector();
    BehaviorTreeBuilder* Repeat(int RepeatNum);
    BehaviorTreeBuilder* ActiveSelector();
    BehaviorTreeBuilder* Filter();
    BehaviorTreeBuilder* Parallel(EPolicy InSucess, EPolicy InFailure);
    BehaviorTreeBuilder* Monitor(EPolicy InSucess, EPolicy InFailure);
    BehaviorTreeBuilder* Back();
    BehaviorTree* End();
}

我的主要问题是,我了解他们创建一个对象指针并向该指针添加方法。

但我不明白的是,当他们调用树构建器时,每个新行都会省略指针名称并摆脱以下示例

...= Builder 
-> functionA()
-> functionB()
-> functionA()
-> functionC(); 

这可能是某种 lambda 表达式、堆栈或队列模式吗? 。 模式的名称是什么?我在哪里可以找到它的参考,因为我读过的所有书籍都没有提到做这样的事情。

提前致谢!

c++ pointers tree
1个回答
1
投票

类的实现

这不是类实现,这是类定义。

可能的类成员函数实现:

BehaviorTreeBuilder* BehaviorTreeBuilder::Sequence() {
  // Do stuff
  return this;
}

所有的魔法都在

return this

= Builder 
-> functionA()
-> functionB();

相同
= (Builder 
-> functionA())
-> functionB();

如果函数返回指针,则可以像处理指针一样处理结果。

© www.soinside.com 2019 - 2024. All rights reserved.