The syntax of sort and templates
Stanislav Blinov via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri May 26 04:53:32 PDT 2017
On Friday, 26 May 2017 at 11:27:19 UTC, zakk wrote:
> I have a followup question: my background is C and in Wolfram
> Mathematica, so my knowledge of templates is limited to trivial
> examples in C++, like:
>
> template <class T>
> const T& min(const T& lhs, const T& rhs)
> {
> return lhs < rhs ? lhs : rhs;
> }
>
> where the template argument is a type, and the function does
> the same job for different types.
>
> It seems to me that when programming in D templates are
> something more powerful, is it correct of thinking of them as
> some argument which is known at compile time? Is this
> misleading?
It is :) Given your example above, 'template' doesn't mean just
'type'. The whole definition is a template, i.e. that is a
template function min. Or, in case of the original question,
'sort' is a template. Not just it's arguments, but it itself.
But yes, templates are purely compile-time constructs. When you
instantiate them with different arguments, you effectively get
different functions in your code. Hence the name: compiler takes
an existing definition (a template) and builds a whole new
concrete function from it.
So if you were to call that C++ min function like this:
min(1, 2);
the compiler would generate a concrete function min, instantiated
with T that is int, and then if you make this call:
min(1.5, 2.0);
then the compiler would generate *another* min, this time for
type double. Note that double is of different size than int (i.e.
usually int is 4 bytes, double is 8), and is also a
floating-point type, not integral. So the compiler would have to
issue different CPU instructions when generating code for it.
So now you get two different functions, but code for both of them
has only been written once, the compiler takes care of the rest.
Had 'min' not been a template, the programmer would have to write
a new version by hand for every type needed, to get the most
efficient code from the compiler.
More information about the Digitalmars-d-learn
mailing list