In C++ what does template<> mean?

前端 未结 3 1024
没有蜡笔的小新
没有蜡笔的小新 2021-01-31 18:33

It\'s not a syntax I\'m familiar with, but I saw it in another question, an example being:

template<> struct Allowed { };
相关标签:
3条回答
  • 2021-01-31 18:59

    It is a template specialization. The typical case would be partial specialization:

    #include <iostream>
    
    template<class T1, class T2> struct foo
    {
      void doStuff() { std::cout << "generic foo "; }
    };
    
    template<class T1>
    struct foo<T1, int>
    {
     void doStuff() { std::cout << "specific foo with T2=int"; }
    };
    

    As you can see, the specialization removes one element from the template parameters and explicitly states a type instead of the removed one. That means if there is only one template type, the <> just become empty:

    template<class T1> struct bar
    {
      void doStuff() { std::cout << "generic bar"; }
    };
    
    template<>
    struct bar<int>
    {
     void doStuff() { std::cout << "specific bar with T1=int"; }
    };
    
    0 讨论(0)
  • 2021-01-31 19:04

    You might just say it is just the required syntax.

    The normal syntax would be template< typename T > struct Allowed;

    Because we know that in this case T is std::string there is nothing to put inside the angled brackets but the word template and the angled brackets are still required because writing struct Allowed<std::string> on its own would not imply that you are specializing the template but simply that you are instantiating one with std::string as the type. (The word "struct" is not necessary to do that but is still permitted).

    0 讨论(0)
  • 2021-01-31 19:08

    It's a specialization. template<> means that the specialization itself is not templated- i.e., it is an explicit specialization, not a partial specialization.

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