On 9/23/07, David Kastrup <dak@xxxxxxx> wrote: > "Marco Costalba" <mcostalba@xxxxxxxxx> writes: > > > On 9/23/07, Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > >> > >> There are a few features of C++ that I really really like. For example, I > >> think the C preprocessor is absolutely horrid, and a preprocessor that is > >> built into the language - and integrates with the syntax - would be > >> wonderful. And while C++ doesn't improve on that, at least templates are > >> an example of something like that. Not perfect, but that's the kind of > >> feature that C really would like. > >> > > > > Yes, I really agree. IMO templates are the thing that more resembles > > procedural programming, a common way of using them is to split data > > structures (containers) from functions that operates on them > > (algorithms). I find them very similar to the struct + functions > > classical approach of C. > > > > And BTW > > > > template <typename T> > > > > is the thing in C++ that more remembers me of opaque pointers and > > their use in C, the difference is that the first is fully type > > checked. > > Not really. The difference is that the first generates new (and > optimized) code for every type which is something you can only do > using macros in C. Class programming is similar to opaque pointers > (in particular concerning the generated code) but templates are really > more like macros, as their instantiation generates specialized code, > not at all like the handling of opaque pointers. > Probably if I had written like this was more clear: template <typename T> int some_function(T* p); And regarding 'new' code for each type I would like to remember that template instantations of different types can be removed by compiler/linker when the instantations are the same (i.e. produce the same binary instuctions), this could happen for function templates that handle pointers, as example. Marco - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html