2016-08-06 10 views
3

Ist die <const char*> optional in unter Code? Ich fand, dass g ++ und clang ohne es ganz gut kompiliert.Funktionstyp Spezialisierungstyp - ist es optional?

template<typename T> 
void debugRep2(T const& t) { 
    std::cout << "debugRep(const T& t)\n"; 
} 

template<> 
void debugRep2<const char*>(const char* const& t) { 
      //^^^^^^^^^^^^^ 
    std::cout << "const char*& t\n"; 
} 

int main() { 
    int n; 
    int *pn = &n; 
    debugRep2(n); 
    debugRep2(pn); 
} 

Antwort

3

Der Templat-Typ ist bereits in den Funktionsparametern festgelegt und kann optional durch den Compiler

template<> 
void debugRep2<const char*>(const char* const& t) { 
         // ^^^^^^^^^^^ already present 
    // ... 
} 

Also ja, in diesem Fall abgeleitet werden soll.


Tatsache In dem gemeinsamen Weg, diese Spezialisierung schreiben würde

template<> 
void debugRep2(const char* const& t) { 
    // ... 
} 
+0

andere Frage sein, aber ist es möglich, die tempalte so zu spezialisieren: 'template <> void debugRep2 (const int & t) {} '? – user463035818

+0

@ tobi303 Ich denke nicht, die Parametertypen würden in diesem Fall in Konflikt geraten. –

+0

Kennen Sie einen Fall, in dem die Vorlage obligatorisch ist? – mike

Verwandte Themen