Standard-Template-Parameter: Warum beschwert sich der Compiler, Template-Argument nicht anzugeben?

8

Ich habe diesen Code:

%Vor%

Wenn ich foo() als Template-Funktion mit der gleichen 'Signatur' für die Vorlage verwende, beschwert sich der Compiler nicht darüber, die Template-Argumente nicht anzugeben:

%Vor%

Warum muss ich also ein Argument für eine Template-Klasse mit einem Default-Parameter angeben, aber nicht für eine Template-Funktion? Gibt es etwas Subtilität, die ich vermisse?

Der Grund dafür ist, dass der Template Argument Deduction fehlgeschlagen ist. Aber ich möchte wissen warum.

    
badmaash 27.06.2012, 16:57
quelle

3 Antworten

7

Die korrekte Syntax ist dies ( Demo ):

%Vor%

Das Standardargument A wird für die Klassenvorlage B angenommen. Der <> -Teil teilt dem Compiler mit, dass B eine Klassenvorlage ist, und fordert ihn auf, den Standardparameter als Template-Argument zu übernehmen.

    
Nawaz 27.06.2012, 17:01
quelle
1

Die korrekte Syntax, wie Nawaz bereits erwähnt hat, ist:

%Vor%

Der Grund ist, dass B die Vorlage ist und B<> die Instanziierung der Vorlage mit dem Standardargument A ist. Aber Sie brauchen <> , um zu differenzieren, wenn Sie eine Instanziierung wünschen.

    
quelle
0

Weil Sie sagen müssen, dass B eine Vorlage ist:

%Vor%

Auch wenn Sie keines der Argumente angeben möchten.

    
rodrigo 27.06.2012 17:02
quelle