/* Voorbeeldcode behorende bij het college "Programmeertechnieken",
 * LIACS, Universiteit Leiden.
 */

#include <iostream>

/* We mogen ook meerdere template argumenten opgeven. */
template <typename T, size_t N>
struct FixedArray
{
  T values[N];

  size_t size(void)
  {
    return N;
  }

  /* Overload de [] operator, zie hieronder hoe dit wordt gebruikt. */
  T &operator[](size_t offset)
  {
    return values[offset];
  }
};

int main(void)
{
  /* Hier geven we dus twee template argumenten op. */
  FixedArray<float, 10> array;

  for (size_t i = 0; i < array.size(); ++i)
    /* Dit is mogelijk door de overload van de [] operator! */
    array[i] = ((int)i) + 3;

  for (size_t i = 0; i < array.size(); ++i)
    std::cout << array[i] << " ";
  std::cout << std::endl;

  return 0;
}