I have designed a quick and basic vector arithmetic library in C++. I call the program from the command line when I need a rapid cross product, or angle between vectors. I don’t use Matlab or Octave or related, because the startup time is larger than the computation time. Again, this is for very basic operations.
I am extending this program, and I will make it work as an RPN calculator, for operations of the type:
1 2 3
4 5 6
x
out: -3 6 -3
(give one vector, another vector, and the “cross” operator; spit out the cross product)
The stack must accept 3d vectors or scalars, for operations like:
1 2 3
2
*
out: 2 4 6
The lexer and parser for this mini-calculator are trivial, but I cannot seem to think of a good way for creating the internal stack. How would you create a stack of for containing vectors or doubles (I rolled up my own very simple vector class – less than one hundred lines and it does everything I need).
How can I create a simple stack which accepts elements of class Vector or type double?
Thank you.
The simplest way would be just to create an
Operandstruct that contains adoublefor the scalar and aVectorobject for the vector:(you can set
isVector_to true if it is a vector operand, and false if it is a scalar operand)For the actual stack, you can just use
std::stack<Operand>.Other options include inheritance (creating scalar and vector types derived from an operand base type) or something like
boost::variant, but for something simple like this, a composition struct like theOperandshown above is probably the easiest way to do it.