[英]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.