I would say the #1 use case for templates is when your other choice is a lot of 
cut and paste. The code bloat's the same in both cases and maintenance is 
definitely easier in the template case.

Smart pointers are another (although those are already in ATS).

I suppose for me the standard use case is encountering a situation that 
requires a rule "always remember to do X" and I think "heck with that, I will 
make the _compiler_ remember to always do X". I do restrain myself when working 
on ATS, though.

I also have strong personal distaste for casting. That's half the reason I 
don't use APR (the other half being the lack of constructors & destructors). 
Although there's an example of the previous use case. Rather than me 
remembering to always cast, I could write a template wrapper for an APR thing 
(such as a hash table) that remembered to cast for me. And it doesn't even 
cause code bloat since it's just doing what I would have typed in myself 
without the template.

I would also like to note that there is already quite a bit of template code in 
ATS (such as lib/ts/Ptr.h and lib/ts/Vec.h).

Saturday, December 3, 2011, 7:14:59 PM, you wrote:

> I've had some nasty template breakages when upgrading gcc.
> And I don't think it was just the major version shifts (as in 3.x to 4.x).

We have had so little problem we don't even bother coordinating g++ versions on 
developer machines, we just use whatever happens to be installed. That could be 
because I have used templates so much. I remember one instance where I did some 
code in template style because I found it clearer until zwoop complained.

Reply via email to