Figure 2: The base template class BaseTest32

template<typename I1, typename I2, typename I3,
   typename O1, typename O2>
class BaseTest32
{
public:
   BaseTest32(){}
   bool run(int first, int last, std::fstream &fout);
   virtual void
   apply(const I1 &, const I2 &, const I3 &, O1 &, O2&)=0;
   virtual const char *getName() const=0;
protected:
   void
   addCase(const I1 &i1, const I2 &i2, const I3 &i3,
      const O1 &o1, const O2 &o2);
private:
   std::vector<I1> i1s;
   std::vector<I2> i2s;
   std::vector<I3> i3s;
   std::vector<O1> o1s;
   std::vector<O2> o2s;
};