C++ 17 wird ein Callable
Konzept haben und ich fragte mich, was genau der Unterschied mit den Typen war, für die std::is_function<T>::value
true
ist. Sind sie gleichwertig? Ist man ein Übersatz des anderen?Was ist der Unterschied zwischen dem Callable-Konzept und den Eigenschaften des Typs std :: is_function?
Antwort
C++ 17 haben ein
Callable
Konzept
Es ist dort in der Standard-C++ seit 11.
Sind sie gleichwertig? Ist man ein Übersatz des anderen?
Nein, in der Tat sind sie völlig disjunkt. Callable
gilt nur für Objekttypen und umfasst alles von Zeiger-zu-Mitglieder zu Typen mit einem überladenen operator()
zu Typen mit einer impliziten Umwandlung in Funktionszeiger auf Funktionszeiger selbst.
is_function
gilt nur für tatsächliche Funktionstypen, die definitionsgemäß keine Objekttypen sind.
Gilt "Callable" nicht auch für Funktionen? –
@NeilKirk Nein, nicht nach dem Standard. Siehe [\ [func.wrap.func \]/2] (http://eel.is/c++draft/func.wrap.func#2) ("Ein aufrufbares Objekt f vom Typ F ist Callable ... "), [\ [funcdef \]/3-4] (http://eel.is/c++draft/function.objects#func.def-3) (" Ein aufrufbarer Typ ist ein Funktionsobjekttyp oder ein Zeiger auf Member. Ein Callable-Objekt ist ein Objekt eines aufrufbaren Typs. "), und [\ [function.objects \]/1] (http://eel.is/c++draft/function.objects# 1) ("Ein Funktionsobjekttyp ist ein Objekttyp, der der Typ des Postfixausdrucks in einem Funktionsaufruf sein kann.") –
LWG ist [passt wahrscheinlich den Wortlaut hier an] (http://wg21.link/lwg2393), aber nicht in einer Weise, die diese Antwort beeinflusst (außer vielleicht "Callable" in "Lvalue-Callable" umzubenennen). –
- 1. Was ist der Unterschied zwischen std :: function und std :: mem_fn
- 2. Was ist der Unterschied zwischen std :: set und std :: map
- 3. Was ist der Unterschied zwischen std :: cout und std :: wcout?
- 4. Was ist der Unterschied zwischen std :: partial_sum und std :: inclusive_scan?
- 5. Was ist der Grund für den Unterschied im Zerstörungsverhalten zwischen std :: unique_ptr und std :: shared_ptr?
- 6. Was ist der Unterschied zwischen den Nur-Get-Auto-Eigenschaften und den Expression-Body-Eigenschaften?
- 7. Was ist der Unterschied zwischen Cache und Eigenschaften von HttpContext?
- 8. Was ist der Unterschied zwischen Boost Smartpointern und Std Smartpointern?
- 9. Was ist der Unterschied zwischen dem Betriebssystem und dem Kernel?
- 10. Was ist der Unterschied zwischen einer Hashtable und Eigenschaften?
- 11. Was ist der Unterschied zwischen dem WebConfigurationManager und dem ConfigurationManager?
- 12. Was ist der Unterschied zwischen den Überlaufeigenschaften `overlay` und` scroll`?
- 13. std :: is_function auf Elementfunktion?
- 14. Was ist der Unterschied zwischen dem Standard- und dem Standardkonstruktor?
- 15. Was ist der Unterschied zwischen std :: tie und std :: make_tuple mit std :: ref-Argumenten?
- 16. Was ist der Unterschied zwischen den KeyCode- und KeyData-Eigenschaften in den .NET WinForms-Schlüsselereignisargumentobjekten?
- 17. Was ist der Unterschied zwischen `==` und `ist`?
- 18. Was ist der Unterschied zwischen `&` und `ref`?
- 19. Was ist der Unterschied zwischen einem Mixin und dem Dekorationsmuster?
- 20. Was ist der Unterschied zwischen dem [OptionalField] und [NonSerialized]
- 21. Was ist der Unterschied zwischen den Klick- und Tippereignissen?
- 22. Was ist der Unterschied zwischen dem Submit-Mechanismus des Client-Browsers und dem ASP.NET-Postback-Mechanismus?
- 23. Was ist der Unterschied zwischen std :: string und std :: basic_string? Und warum werden beide benötigt?
- 24. Was ist der Unterschied zwischen std :: string :: c_str und std :: string :: data?
- 25. Was ist der Unterschied zwischen den Eigenschaften Keys und AllKeys in einer NameValueCollection?
- 26. Was ist der Unterschied zwischen OnStart und dem App Constructor
- 27. Was ist der Unterschied zwischen dem neuen Operator und Class.newInstance()?
- 28. Was ist der Unterschied zwischen:.! und: r !?
- 29. Was ist der Unterschied zwischen $ (...) und `...`
- 30. Was ist der Unterschied zwischen Verilog! und ~?
Nun, ein Objekt mit überladenem 'operator()' ist aufrufbar, aber keine Funktion –
@ M.M Ich denke, das Problem liegt mit dem Namen. Funktionen * sind * aufrufbar, aber auch Funktionsobjekte. Es ist schade, dass es keinen besseren Namen gibt ...? – VermillionAzure