Escualo Escualo - 7 months ago 27
C++ Question

C++ stack for multiple data types (RPN vector calculator)

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.

Answer Source

The simplest way would be just to create an Operand struct that contains a double for the scalar and a Vector object for the vector:

struct Operand
{
    double scalar_;
    Vector vector_;
    bool isVector_;
};

(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 the Operand shown above is probably the easiest way to do it.