c_cpp cpp对于使用动态转换和内存的可评估节点的想法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp cpp对于使用动态转换和内存的可评估节点的想法相关的知识,希望对你有一定的参考价值。

#include <iostream>

/**
 * prototype for evaluatable tree
 */

enum EvalType {
	EvalType_Int,
	EvalType_Add
};
/* Base eval class
 * has a type and a result node.
 * the result node carries the last evaluatable result 
 */
class EvalNode
{
public:
	EvalNode(): _result(nullptr) {}
	~EvalNode() { delete _result; }


	EvalType getType() const {
		return _type;
	}
	void setType(EvalType type) {
		_type = type;
	}

	const EvalNode* getResult() const {
		return _result;
	}

	void delResult() {
		delete _result;
		_result = nullptr;
	}

	bool hasResult() const { return _result != nullptr; }

	/**
	 * this resets the result node based off the 
	 * child node values.
	 */
	virtual void eval() const {
		_result = this;
	}
private:
	EvalNode* _result;
	EvalType _type;
};

/**
 * class to represent int
 */
class IntNode : public EvalNode
{
public:
	IntNode(int value = 0): _value(value) {
		setType(EvalType_Int);
	}
	~IntNode(){}

	int getValue() const { return _value; }
	void setValue(int val) { _value = val; }
private:
	int _value;
};

class AddNode : public EvalNode
{
public:
	AddNode(int lfs, int rfs):
	       _lfs(new IntNode(lfs)),
	       _rfs(new IntNode(rfs))
	       {
	       	  setType(EvalType_Add);
	       }
	AddNode(EvalNode* lfs = nullptr, EvalNode* rfs = nullptr):
	        _lfs(lfs), _rfs(rfs)
	        {
	        	setType(EvalType_Add);
	        }
	~AddNode() {
		delete _lfs;
		delete _rfs;
	}

	void eval() const {
		if(_lfs != nullptr)
			_lfs.eval();
		if(_rfs != nullptr)
			_rfs.eval();
		IntNode* ilfs = dynamic_cast<IntNode*>(_lfs);
		IntNode* irfs = dynamic_cast<IntNode*>(_rfs);
		if(hasResult()) {
			delResult();
		}
		_result = new IntNode(ilfs.getValue() + irfs.getValue());
	}
private:
	EvalNode* _lfs;
	EvalNode* _rfs;
};



int main(int argc, char const* argv[]) {
	std::cout << "Hello World!\n";
}

以上是关于c_cpp cpp对于使用动态转换和内存的可评估节点的想法的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 评估反向波兰表示法

c_cpp 可评估语言的第一个原型

c_cpp c中自我评估型系统的原型。

c_cpp LeetCode - 等式方程的可满足性

c_cpp 可评估表达式中的新计算模型。

c_cpp 给你一个文本文件太大,不适合内存和3个字符串A,B,C。对于每个字符串,你有一个列出位置o的排序数组