将函数指针传递给构造函数C ++

时间:2010-12-03 22:15:22

标签: c++ function-pointers game-engine

我正在尝试为我的程序创建一个决策树,其中每个节点都具有类似的分支功能,但在分支方法中具有不同的主体。我已经想出如何获取函数指针到方法,但现在它似乎不想把指针带到类之外的方法。

这是我的节点类

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

由于

1 个答案:

答案 0 :(得分:1)

我没有看到代码中的函数指针有任何混乱,所以我将尝试从问题中收集到最好的答案。

  

似乎不想把指针带到类

之外的方法

我的通灵调试能力意味着您正在尝试创建指向类方法的指针。如果是这样,你没有普通的函数指针,你有一个成员函数指针。成员函数指针有自己的特殊语法,因为成员函数被设计为在this参数的上下文中运行,该参数是该函数的隐式部分。

听起来你正在努力做的事情会更好地通过策略模式来完成,或者通过将你想做的不同事情变成普通函数而不是成员函数。 C ++并不要求所有东西都在一个类中,并且没有理由进行编程以使所有东西都在类中;)