gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:24:59 26 4
gpt4 key购买 nike

我正在尝试为我的程序制作一个决策树,其中每个节点都具有相似的分支函数,但分支方法中的主体不同。我已经想出如何将函数指针获取到方法中,但现在似乎不想将指针指向类外部的方法。

这是我的节点类

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

这是节点类正在使用的接口(interface)

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

谢谢

最佳答案

我没有看到您的代码中的函数指针有任何困惑,因此我将尝试根据我从问题中收集到的信息做出最好的回答。

it seems to not want to take the pointer to method outside of the class

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

这听起来像策略模式 可以更好地满足您尝试做的事情,或者通过将您想做的不同事情变成普通函数,而不是成员函数。 C++ 并不要求所有东西都在一个类中,而且真的没有理由让所有东西都在一个类中进行编程;)

关于c++ - 将函数指针传递给构造函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4350327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com