Wie instanziiere ich eine Template-function explizit?

Ich habe eine Template-function mit einem Argument. Ich muss diese function instanziieren, ohne diese function aufzurufen bedeutet, dass ich explizit instanziieren muss.

Ich habe diese function:

template  int function_name(T a) {} 

Ich habe diese function wie folgt instanziiert:

 template int function_name(int); 

Aber ich habe folgende Fehler:

 error: expected primary-expression before 'template' error: expected `;' before 'template' 

   

[BEARBEITEN 2]: Beachten Sie, dass aufgrund von Codeformatierungsproblemen einige Verwirrung bezüglich des Codes in der ursprünglichen Frage bestand. Siehe AnthonyHatchkins ‘Antwort für weitere Details.

Wenn Sie die function wirklich instanziieren möchten (anstatt sich zu spezialisieren), tun Sie Folgendes:

 template  void func(T param) {} // definition template void func(int param); // explicit instantiation. 

[EDIT] Es scheint (viel) Verwirrung bezüglich expliziter Instanziierung und Spezialisierung zu geben. Der Code, den ich oben gepostet habe, beschäftigt sich mit expliziter Instanziierung . Die Syntax für die Spezialisierung ist unterschiedlich. Hier ist die Syntax für die Spezialisierung:

 template  void func(T param) {} // definition template <> void func(int param) {} // specialization 

Beachten Sie, dass spitze Klammern nach Vorlage!

Dein Code ist korrekt.

Die Fehlermeldung bezieht sich auf einen Platz im Code, den Sie hier nicht angegeben haben.

Aktualisieren:

Ursprünglicher Code war

 template  int function_name(T a) {} template int function_name(int); 

und es war richtig.

Aber es wurde nicht zitiert und sah so aus :

 template int function_name(T a) {} template int function_name(int); 

Es erzeugt den folgenden Fehler

 a.cpp:1: error: explicit instantiation of non-template 'int function_name' a.cpp:1: error: expected `;' before '(' token a.cpp:3: error: 'function_name' is not a template function 

Das unterscheidet sich deutlich von dem, was OP zitiert hat.

In dieser Variante ist die zweite Zeile ok ( kann hier weggelassen werden), aber die erste Zeile ist errorshaft. Der Compiler kann nicht erraten, dass T ein Vorlagenparameter ist.