From 5d618cc8affb959ac64f9cf502dbddf53fb5e7c5 Mon Sep 17 00:00:00 2001 From: Adrian Kummerländer Date: Sat, 10 Mar 2012 19:14:27 +0100 Subject: Moved static_cast needed for accessing the specific solve methods of the two derivatives of Node into a template function --- parser.cpp | 4 ++-- tree.cpp | 13 ++++++++----- tree.h | 3 +++ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/parser.cpp b/parser.cpp index d3a9bb7..968053d 100644 --- a/parser.cpp +++ b/parser.cpp @@ -114,7 +114,7 @@ Node* Parser::buildTree(Tree **tree, string term) vector *tmpLexer; - vector *lexerOutput = lexer(term); + vector *lexerOutput = this->lexer(term); for ( vector::iterator termIter = lexerOutput->begin(); termIter != lexerOutput->end(); termIter++ ) { priority = this->getPriority( (*termIter)[0] ); @@ -150,7 +150,7 @@ Node* Parser::buildTree(Tree **tree, string term) } } else { - tmpLexer = lexer( *termIter ); + tmpLexer = this->lexer( *termIter ); if ( tmpLexer->size() == 1 ) { operandStack->push( diff --git a/tree.cpp b/tree.cpp index ee45e57..340685f 100644 --- a/tree.cpp +++ b/tree.cpp @@ -1,21 +1,24 @@ #include "tree.h" -#include Node::Node() { } +template +double Node::castSolve (Node *node) { + T *tmp = static_cast( node ); + return tmp->solve(); +} + double Node::solve() { switch (this->type) { case OPERAND_NODE: { - OperandNode *tmp = static_cast( this ); - return tmp->solve(); + return this->castSolve( this ); } case OPERATOR_NODE: { - OperatorNode *tmp = static_cast( this ); - return tmp->solve(); + return this->castSolve( this ); } } } diff --git a/tree.h b/tree.h index 2a0bb84..b112dcb 100644 --- a/tree.h +++ b/tree.h @@ -16,6 +16,9 @@ class Node public: Node(); double solve(); + + template + double castSolve(Node*); Node *leftChild; Node *rightChild; -- cgit v1.2.3