Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ How do compilers handle templates [duplicate]

Tags:

c++

templates

As some of you may know from my recent posts i am studying for a C++ exam which the content for the class was delivered very poorly. I am basically having to self teach everything myself so bear with me here.

This is an exam question:

(i)Explain the concepts of templates as defined in the C++ language. Be sure to differentiate between what the programmer does and what the compiler does.

My current rationale:

(i) A template allows a function or class to operate using generics. This allows the programmer to effective program X functionality once, and be able to use this functionality with many different data types without having to rewrite the application or parts of the application multiple times.

My problem is i have no idea how the compiler handles the use of templates.

I am unsure what the compiler does at this stage, if somebody could clear this up it would be helpful.

like image 841
chris edwards Avatar asked Nov 03 '25 17:11

chris edwards


1 Answers

Templates in C++ are implemented through substitution. It's not like Java generics which just type check the code which involves the generics class and then compiles it using raw references (type erasure).

Basically C++ creates a different class/method for each actual template argument used in your code. If you have your

template<typename T>
void myMethod(T t)
{
  //
}

what happens at compile time is that a different method is compiled for each type the template is actually used. If you use it on myMethod(50) and myMethod("foo") then two overloaded version of the method will be available at runtime. Intuitively this means that templates could generate code bloating but in practice the same expressiveness is obtained by a larger codebase without templates with less readability so that's not a real concern.

So there is no black magic behind them (ok there is if you consider meta programming or partial specialization).

like image 97
Jack Avatar answered Nov 05 '25 08:11

Jack



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!