C++ How do compilers handle templates

后端 未结 3 1183
孤城傲影
孤城傲影 2021-01-20 19:56

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 ever

相关标签:
3条回答
  • 2021-01-20 20:26

    let's say you write a function using templates:

    template <typename T>
    void function(T t){
     doSomething();
    }
    

    for each data type you call this function, the compiler simply replaces the 'T' with that data type, say 'int' and generates code for that like you've written this function with 'int' instead of 'T' since the beginning. This is probably the right (but not the complete) answer if others agreed.

    0 讨论(0)
  • 2021-01-20 20:28

    For each instance of an object of a different type that you create or in case of functions the different type of arguments that you use, the compiler simply makes an overloaded version at compile time. So if you have a template function like a sort function and use that function for int and double arrays, then the compiler have actually made two functions: one using int and the other using double. This is the simplest explanation I could give. Hope it's useful.

    0 讨论(0)
  • 2021-01-20 20:33

    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).

    0 讨论(0)
提交回复
热议问题