Erzwingt eine bestimmte Überladung bei der Vorlagenvorlage

8

Betrachten Sie den folgenden Code:

%Vor%

Standardmäßig wird Folgendes erzeugt:

%Vor%

Wie man die Verwendung von Version B erzwingt, wenn der übergebene Typ eine Template-Vorlage mit dem guten Shape ist (Ich kann neue Versionen von f hinzufügen, ich kann std::enable_if oder andere C ++ 11-Type-Traits-Syntax hinzufügen , aber wenn möglich, möchte ich vermeiden, eine Hilfsklasse hinzuzufügen)?

    
Vincent 17.12.2012, 08:03
quelle

2 Antworten

11

std::vector nimmt keinen einzigen typename Parameter, es dauert 2! Vergessen Sie nicht den Zuordner.

Verwenden Sie daher variadische Vorlagen:

%Vor%

Jetzt funktioniert es wie Sie wollen.

    
Pubby 17.12.2012, 08:06
quelle
1

Wie Pubby in seiner Antwort erklärt hat, ist std :: vector eine Vorlage mit zwei Parametern, daher braucht Ihre Überladungsfunktion um mehr Template-Parameter zu nehmen. Wenn Sie variadische Vorlagen nicht verwenden möchten, müssen Sie die richtige Anzahl von Parametern einstellen:

%Vor%     
BЈовић 17.12.2012 08:24
quelle