Listing 7: Partial listing of calculator DLL

#define stack calculator_stack

class plus : public operation
  {
  public:
    virtual int operate( stack* p_stack )
      {
      int l = p_stack->pop( );
      int r = p_stack->pop( );
      int result = l + r;
      p_stack->push( result );
      return result;
      }
    virtual void destroy( ) { delete this; }
  };
// defined in engine.h; provides the
// base and prefix tokens
// required by FACTORYFUNC
FACTORY_ENTRY( plus , plus )
FACTORY_ENTRY( plus , add ) // Create an alias for class plus.

class minus : public operation
  {
  public:
    virtual int operate( stack* p_stack )
      {
      int l = p_stack->pop( );
      int r = p_stack->pop( );
      int result = l - r;
      p_stack->push( result );
      return result;
      }
    virtual void destroy( ) { delete this; }
  };
FACTORY_ENTRY( minus , minus )

...