Übergeben der Position des variablen Vorlagearguments

8

Ich möchte eine Funktion erstellen, die eine variable Anzahl von Template-Argumenten akzeptiert. Später mit diesen Argumenten sollte die Funktion ihre Position so übergeben:

%Vor%

Der angegebene Code ist natürlich nicht kompilierbar. Gibt es eine Möglichkeit, es zu beheben? Gibt es eine Möglichkeit, dies ohne variante Vorlagen ohne zu viel Code-Duplizierung zu tun?

    
Juraj Blaho 04.03.2013, 15:07
quelle

1 Antwort

14

Ja, das ist möglich:

%Vor%

Mit diesen Helfern benötigen Sie einen Forwarder für Ihre Funktion:

%Vor%

BEARBEITEN: Wie funktioniert es? Zuerst ermitteln wir die Größe des Argumentpakets Args bis sizeof... . make_indices<N>::type wird dann in indices<0,1,2,...,N-1> erweitert. Es wird als zusätzlicher Parameter für die Implementierungsfunktion angegeben (von der Weiterleitung, die nur eine Dummy-Instanz erstellt), daher beginnt der Argumentabzug auf der Seite der Implementierungsfunktion und setzt die generierten Indizes in das Argument pack Ns .

Die Implementierungsfunktion hat nun zwei Argumentpakete mit der gleichen Größe, nämlich Args und Ns . Wenn sie durch die Ellipse ... erweitert wird, erweitert die Ellipse den ganzen Ausdruck , auf den sie angewendet wird, und sie erweitert alle Parameterpakete parallel! Im obigen Beispiel ist dieser Ausdruck read<Args>(Data, Ns+1) , was sich gut in den Pseudocode des OPs erweitert.

    
Daniel Frey 04.03.2013, 15:13
quelle

Tags und Links