Übergabe von std :: integer_sequence als Template-Parameter an eine Metafunktion

8

Wie kann ich ein std::integer_sequence als Template-Parameter an eine Meta-Funktion übergeben (d. h. keine Funktionsvorlage)?

Gegeben z. der folgende Anwendungsfall (aber nicht darauf beschränkt):

Ich möchte eine Integer-Sequenz verwenden, um die letzten N -Typen aus einem Parameter-Pack zu entfernen. Ich dachte, ich könnte selector von diese SO-Frage verwenden, aber ich versäumte es, die Integer-Sequenz an diese Meta-Funktion zu übergeben.

%Vor%

Compiler Fehler

%Vor%

leben auf coliru

Wie würde ich die Integer-Sequenz übergeben?

    
m.s. 08.08.2015, 12:24
quelle

2 Antworten

10

Sie müssen selector (teilweise) spezialisieren, damit die Indizes aus std::index_sequence abgeleitet werden:

%Vor%

DEMO

    
Piotr Skotnicki 08.08.2015, 12:26
quelle
1

Für einen einfachen Anwendungsfall können Sie die Metafunktion auch als Funktionsvorlage schreiben.

%Vor%

Übrigens ist die tuple_element Implementierung von selector im Allgemeinen recht ineffizient, da die Anzahl der erforderlichen rekursiven Template Instanziierungen quadratisch ist. Diese Antwort zeigt eine Möglichkeit, die Anzahl der erforderlichen Template-Instanziierungen linear in der Anzahl der Typen in der Liste zu machen.

>     
T.C. 08.08.2015 17:07
quelle

Tags und Links