Escualo - 7 months ago 27

C++ Question

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.