Maybe a tad of scalability
I'm actually in process of writing this memoization thing (I found a way 'round making something productive yesterday...).And I wasn't sure how to implement this technique flexible without sacrifizing compatibility with later, bigger excursion. Namely other index ranges, huge amounts of data and so on. I think this one could bring some more benefits, so I wasn't happy with just using my custom "Index" typedef that's nothing but an unsigned int. I also have other types with different ranges, but that doesn't matter if I actually want to simply change it on-the-fly. That also came to my mind when implemented several math-related alghorithms that benefit from different types for counter variables (sometimes int is better, sometimes float is - depending on how the formular looks). I used a single template parameter to identify the Index type used there and it worked OK in this case. Since almost all of my classes take template parameters for such "could be useful in this situation" facts, it should harm to add another, I think... Making declarations longer, I'm not where this should end, but I hope it's worthless. I don't like having special solution for every cases. As long as I see one features usefull, I want to apply it where it makes and where it is useful. That's the kind of complementition I like to have in my personal projects. It's the freedom of having a - for me - perfect code without heavy flaws, going nicely along with everything else and forming a definite codeline for further classes and structures. Personally, I adore that kind of freedom to make whatever feature you think is awesome and then combine into on well-written thing. I'm currently not interested in making everything - I just want to make my stuff good and end of discussion. And I'm glad that I currently don't need to worry about making other stuff, term breaks are simply awesome.