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
Aber anscheinend gibt es so etwas nicht.
Also, gibt es eine Lösung oder sollte ich bei neg_f <pred>::map
bleiben?
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.
Tags und Links c++ c++11 templates template-aliases