Von here scheint es mir, dass die std::function
keine function_type
oder äquivalenten Member-Typ hat, um den tatsächlichen Typ zu exportieren, der verwendet wird, um es zu initialisieren.
Es hat result_type
, argument_type
, sowie first_argument_type
und second_argument_type
, aber nichts wie der oben genannten Typ.
Warum bietet es keinen solchen Typ als Teil seiner Schnittstelle?
Es wird sicher einen guten Grund dafür geben, aber ich kann nicht herausfinden, was das ist, also bin ich nur neugierig, es herauszufinden.Warum hat std :: function keinen function_type oder einen äquivalenten Membertyp?
Denn ich weiß, ist die erste Frage sein, warum brauchen Sie es, gut vorstellen, dass ich so etwas wie std::is_same<F1::function_type, F2::function_type>::value
tun möchten zu überprüfen, ob ihre zugrunde liegenden Typen das gleiche in einer sfinae Auswertung sind, wo es ist Gut, wenn sie verschiedene Funktionen enthalten, solange die Zeichen gleich sind.
Ich gebe zu, dass es nicht viel Sinn macht, um ehrlich zu sein, die Frage ist nur wegen der Neugier.
EDIT
Wie in den Kommentaren der his answer von @ Brian erwähnt, mißbraucht ich den Begriff initialisieren, wenn ich schrieb:
den tatsächlichen Typ Export verwendet es zu initialisieren
Was mich interessiert ist das Template-Argument in der Tat.
Als ein Beispiel für eine std::function<void(S&, int)>
(S
ist eine Struktur), function_type
wäre void(S&, int)
.
Für die 'is_same'-Prüfung können Sie einfach prüfen, ob' F1' und 'F2' vom selben Typ sind, oder? – Brian
@Brian yeah, absolut, notiere meinen Kommentar * Ich gebe zu, dass es nicht viel Sinn macht * !! :-) ... Ich bin nur neugierig zu wissen, ob es einen Grund gibt, warum es nicht Teil der Schnittstelle der Funktion ist, auch wenn ich keinen vernünftigen Nutzen dafür finden kann und das wäre schon ein gutes Antwort in der Tat. Ich bin mir nicht sicher, ob * es nutzlos ist * ist die einzige vernünftige Antwort oder wenn es andere Gründe gibt. Das ist alles. – skypjack