gpt4 book ai didi

c++ - 将二进制节点类转换为非终端类

转载 作者:行者123 更新时间:2023-12-01 14:58:21 25 4
gpt4 key购买 nike

我有一个叫做Binary_Node的类,该类继承自抽象的Node类。

class BinaryNode: public Node<BinaryNode>
{
public:
// Constructor
BinaryNode(int (*)(int, int));

// Destructor
~BinaryNode();

// Connectors
void attach(std::vector<Node *>) override;

// Function
int (*function)(int, int);

// Evaluation
int evaluate() override;
};

它允许您将其他二进制节点或附加到计算为int的终端节点上。该方法实现如下。
#include "BinaryNode.h"

BinaryNode::BinaryNode(typed_value (*FUNCTION)(typed_value, typed_value)) : Node() {
function = FUNCTION;
}

BinaryNode::~BinaryNode() = default;

void BinaryNode::attach(std::vector<Node *> CHILDREN) {
children = CHILDREN;
}

int BinaryNode::evaluate() {
return function(children[0]->evaluate(), children[1]->evaluate());
}

我最近在C++ 17中发现可以
template<typename ... T>
bool compare(const char scope, T ... args) {
return ((scope == args) || ...);
}

compare('a', 'b', 'c', 'd') // False
compare('a', 'b', 'c', 'a') // True

是否可以对我的类(class)做一些类似的事情,使 function评估所提供的 child 数。就像是
template<typename ... T>
int BinaryNode::evaluate(T ... args) {
return function(/*?*/);
}

通过将其从 Binary_Node类转换为 Nonterminal_Node类。

编辑:

我在堆栈溢出中找到了一个很好的例子,它说明了我想做什么以及如何完成它。 Essentially it's expanding std::vector into a parameter pack。现在,我仍然需要找到虚拟模板成员函数的解决方法。

最佳答案

取决于应该执行的评估,如果要对返回的值求和,则可以覆盖+运算符并对其进行折叠

关于c++ - 将二进制节点类转换为非终端类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59321336/

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