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)?
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%Tags und Links c++ c++11 templates metaprogramming