C ++ 11 Typ Rückschluss mit Lambda und Std :: Funktion

8

Ich habe das folgende Codeschnipsel, das, obwohl es ganz trivial ist, ein Muster darstellt, das ich in allgemeinerem Code verwenden möchte.

%Vor%

Ich möchte unary_apply mit Funktionszeigern, Funktoren, lambdas usw. aufrufen können: daher die Verwendung von std::function , um das alles wegzuziehen.

Wenn ich versuche, das obige auf die folgende Weise zu verwenden, kann C ++ (g ++ 4.7) die relevante Typeninferenz nicht ausführen:

%Vor%

Fehler bei

%Vor%

Und ich finde, dass ich die Template-Parameter explizit spezifizieren muss (in der Praxis glaube ich, dass es nur der Rückgabetyp ist, der nicht ergiebig ist):

%Vor%

Ich bin nicht so vertraut mit den Regeln für Typinferenz in C ++ 11, aber das obige Verhalten scheint vernünftig zu sein (ich kann sehen, dass das Ableiten über die interne Mechanik von std::function wahrscheinlich eher eine große Frage ist). Meine Frage ist: ist es möglich, die obige Funktion unary_apply neu zu schreiben, um die gleiche Flexibilität (in Bezug auf die Typen von Funktionen / Funktoren usw., die als zweiter Parameter übergeben werden können) beizubehalten, während sie auch mehr Hinweise geben Typ-Inferenz, damit ich die Template-Parameter nicht explizit zur Verfügung stellen muss?

    
Alex Wilson 05.07.2012, 12:10
quelle

1 Antwort

9

Going Bit mehr Ente-typy sollte funktionieren:

%Vor%     
Cat Plus Plus 05.07.2012, 12:17
quelle

Tags und Links