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?
Tags und Links c++ lambda c++11 type-inference