C++ property like accessors [Sunday, 2013-03-10]

Again something most C++ programmers would know but that I find incredibly useful in certain cases.

#include <iostream>
#include <algorithm>

template <int Size>
class vector
{
  public:
    vector (void) : _data(new int[Size]),
                    x(Size >= 1 ? _data[0] : _guard[0]),
                    y(Size >= 2 ? _data[1] : _guard[0]),
                    z(Size >= 3 ? _data[2] : _guard[0]),
                    w(Size >= 4 ? _data[3] : _guard[0])
    {
      std::fill_n(_data, Size, 0);
    }

  private:
    int* _guard[0];
    int* _data;

  public:
    int& x;
    int& y;
    int& z;
    int& w;
};

int
main (int argc, char* argv[])
{
  vector<3> bar;

  std::cout << bar.x << std::endl;
  bar.x = 3;
  std::cout << bar.x << std::endl;

  return 0;
}

I don’t think it’s possible to define stuff in templates only according to its parameters, if it were possible one could avoid the _guard business and just define the property when it’s present, such is life.

This can make vector usage a bit easier on the eyes instead of having streams of [] accesses.