私はすべてのノードが同じ分岐関数を持っているが分岐メソッドでは異なる本体を持つ私のプログラムのための意思決定ツリーを作ろうとしている。私はメソッドに関数ポインタを取得する方法を考え出しましたが、今はクラス外のメソッドにポインタを渡したくないようです。コンストラクタへの関数ポインタの受け渡しC++
は、これは私のノードクラス
class FighterDecisionTreeNode :
public IDecisionTreeNode
{
private:
FighterDecisionTreeNode* posChild;
FighterDecisionTreeNode* negChild;
DecisionFunction *decisionFunc;
public:
FighterDecisionTreeNode(DecisionFunction *decisionFunction);
~FighterDecisionTreeNode(void);
FighterDecisionTreeNode* getChild(bool child);
bool getBranch(SpaceObject* object, SpaceObject* thisShip);
IDecisionTreeNode* makeDecision(SpaceObject* object, SpaceObject* thisShip);
};
FighterDecisionTreeNode::FighterDecisionTreeNode(DecisionFunction * decisionFunction)
{
decisionFunc = decisionFunction;
}
FighterDecisionTreeNode::~FighterDecisionTreeNode(void)
{
}
FighterDecisionTreeNode* FighterDecisionTreeNode::getChild(bool child)
{
if(child)
{
return posChild;
}
else
{
return negChild;
}
}
IDecisionTreeNode* FighterDecisionTreeNode::makeDecision(SpaceObject* object, SpaceObject* thisShip)
{
return getChild(getBranch(object, thisShip))->makeDecision(object,thisShip);
}
bool FighterDecisionTreeNode::getBranch(SpaceObject* object, SpaceObject* thisShip)
{
return decisionFunc(object, thisShip);
}
これは私の木のクラスである
class FighterDecisionTree:
public IDecisionTree
{
private:
//decision methods
bool isEnemy(SpaceObject* enemy, SpaceObject* ship);
//decision nodes
FighterDecisionTreeNode * isEnemyNode;
public:
FighterDecisionTree(void);
virtual ~FighterDecisionTree(void);
bool getBranch(SpaceObject* object);
virtual IDecisionTreeNode* makeDecision();
};
FighterDecisionTree::FighterDecisionTree(void)
{
isEnemyNode = new FighterDecisionTreeNode(&isEnemy);
}
FighterDecisionTree::~FighterDecisionTree(void)
{
}
IDecisionTreeNode* FighterDecisionTree::makeDecision(){
return NULL;
}
bool FighterDecisionTree::getBranch(SpaceObject* object)
{
return false;
}
// I need to pass a condition to each seperate node,
//but each must have a seperate condition
bool FighterDecisionTree::isEnemy(SpaceObject* enemy, SpaceObject* ship)
{
return true;
}
これは、ノードクラスは
class IDecisionTreeNode
{
private:
//This is for creating the BST
//IDecisionTreeNode* posChild;
//IDecisionTreeNode* negChild;
public:
typedef bool (DecisionFunction)(SpaceObject* enemy, SpaceObject* ship);
IDecisionTreeNode(void);
IDecisionTreeNode(DecisionFunction *decisionFunction);
~IDecisionTreeNode(void);
virtual IDecisionTreeNode* makeDecision(SpaceObject* object, SpaceObject* thisShip)=0;
};
を使用しているインターフェースであります
ありがとう
各行の先頭に余分なスペースを4つ追加してください適切にアップ。 –
コードを正しくインデントしてください。誰もがこのように見えるコードを読んでくれる可能性は低いです(いいえ、私は各行の4つの余分なスペースについて話していません)。 – jwueller
申し訳ありませんが、サインアップして、何とか私の書式設定がどうにかして失敗しました – iaremonkey