Template-Vorlagen-Alias ​​in eine verschachtelte Vorlage?

9

Template-Aliase sind sehr praktisch, um Typen wie typename F <T>::type auf nur F <T> zu vereinfachen, wobei T und type Typen sind.

Ich möchte das Gleiche für Templates wie F <T>::map tun, d. h., sie zu F <T> vereinfachen, wobei T und map Template-Strukturen oder Aliase sind.

Betrachten Sie zum Beispiel die folgenden Definitionen:

%Vor%

Nun funktioniert Folgendes:

%Vor%

Dies wäre viel bequemer, aber es schlägt fehl:

%Vor%

(Scheitert auch mit neg = neg_f <F>::template map , auch wenn map als Struktur definiert ist). Es scheint, dass die Definition von neg oben eher wie ein "Vorlagen-Vorlagenalias" sein müsste

%Vor%

Aber anscheinend gibt es so etwas nicht.

Also, gibt es eine Lösung oder sollte ich bei neg_f <pred>::map bleiben?

    
iavr 09.09.2013, 13:59
quelle

1 Antwort

1

Denken Sie zunächst daran, das Schlüsselwort typename zu verwenden, um anzugeben, dass es sich um einen verschachtelten Typ handelt, unabhängig davon, ob es sich um einen Typ (z. B. struct, Klasse usw.), Vorlagentyp, Typdef oder Alias ​​handelt.

Alias ​​ Spezifikation erfordert, dass Sie eine type-id angeben ein zuvor definierter Typ In diesem speziellen Fall wird die korrekte Verwendung von type-id wie folgt aussehen:

%Vor%

Sie versuchen ursprünglich, Vorlagenname neg_f<F>::map als Typ-ID zu verwenden. Das ist nicht richtig.

Wahrscheinlich möchten Sie den Parameter T von F irgendwie ableiten, der in template map<T> verwendet wird, aber dies ist nicht auf Ihren endgültigen Anwendungsfall fun<neg<pred>> anwendbar, wobei T nicht aufgelöst wird.

    
slk 11.04.2014 10:05
quelle