c++ - 将二进制节点类转换为非终端类
问题描述
我有一个类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
可以对我的班级做类似的事情,允许function
评估尽可能多的孩子。就像是
template<typename ... T>
int BinaryNode::evaluate(T ... args) {
return function(/*?*/);
}
通过将它从一个Binary_Node
类转换为一个Nonterminal_Node
类。
编辑:
我找到了一个很好的例子,说明我想要做什么以及如何完成它的堆栈溢出。本质上,它将 std::vector 扩展为参数包。现在我仍然需要找到一个虚拟模板成员函数的解决方法。
解决方案
取决于应该做什么评估,如果你想对返回的值求和,你可以覆盖 + 运算符并折叠它
推荐阅读
- mysql - 根据销售数量获取前 10 名用户数据
- amazon-web-services - 公共和私有拓扑中的 Kubernetes 集群
- jquery - Jquery按日期对html表格行进行排序
- android - 位置包示例不适合我 Flutter
- html - 角度的动态行跨度
- c++ - Babbage 的 C++ 数字没有显示正确的结果
- jenkins - 詹金斯:拉取请求正在被触发开发和质量检查分支
- css - Bootstrap 模态演示示例不适用于本地主机,但适用于实时环境
- uiimage - 是否可以将图像添加到 CGFloat
- sql-server - 将两个字符串连接为一个而不重复