Back to slide -- Keyboard shortcut: 'u'  previous -- Keyboard shortcut: 'p'  next -- Keyboard shortcut: 'n'          templates/functions/point-norms-and-compare-3/norms.cc - Four different policy classes - with type parameterized static methods.Lecture 5 - slide 37 : 40
Program 8

// Four different Point policies - the static methods are now specific to class Point.
// This file does not have any template classes nor template functions.

#include <cmath>
#include "Point.h"

struct FixedNorm{
  static bool less_than(const Point& a, const Point& b){
    return false;
  }

  static double distance_to(const Point& a, const Point& b){
    return 7.0;
  }
};


struct HorizontalNorm{
  static bool less_than(const Point& a, const Point& b){
    return a.getx() < b.getx();
  }

  static double distance_to(const Point& a, const Point& b){
    return fabs(a.getx() - b.getx());
  }
};


struct VerticalNorm{
  static bool less_than(const Point& a, const Point& b){
    return a.gety() < b.gety();
  }

  static double distance_to(const Point& a, const Point& b){
    return fabs(a.gety() - b.gety());
  }
};


template<typename T>double square(T a){
  return a*a;
}

struct Norm{
 static bool less_than(const Point& a, const Point& b){
    return (a.getx() < b.getx()) && (a.gety() < b.gety());
  }

 static double distance_to(const Point& a, const Point& b){
    return sqrt(square(a.getx() - b.getx()) + square(a.gety() - b.gety()));
  }
};