簡體   English   中英

c++ 沒有分號或指針引用的行為樹模式和調用成員

[英]c++ Behavioral tree patterns and calling members without semicolons or pointer references

我有一個關於在行為樹模式中調用這種類型的實現的快速問題。 從我看到的第一行來看,他們將指向 object 的指針稱為“構建器”,但之后的每一行都省略了對指針 object 的調用“構建器”。 他們還省略了“;” 分號

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 的定義如下所示

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();
}

我的主要問題是我知道他們創建了一個 object 指針並向該指針添加了方法。

但我不明白的是,當他們調用樹生成器時,每條新行都省略了指針名稱,並且跟隨例如

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

這可能是某種 lambda 表達式或堆棧或隊列模式? . 模式名稱是什么,我在哪里可以找到它的參考,因為我讀過的所有書籍都沒有提到做這樣的事情。

提前致謝!

class的實現

這不是 class 實現,這是 class 定義。

可能的 class 成員 function 實現:

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

所有的魔法都在return this

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

這和

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

如果 function 返回一個指針,您可以像處理指針一樣處理結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM