C++ 17 avrà un concetto Callable
e mi chiedevo quale fosse esattamente la differenza con i tipi per cui std::is_function<T>::value
è true
. Sono equivalenti? Uno è un superset dell'altro?Qual è la differenza tra il concetto Callable e i tratti del tipo std :: is_function?
risposta
C++ 17 avrà un
Callable
concetto
E 'lì nello standard dal C++ 11.
Sono equivalenti? Uno è un superset dell'altro?
No, in effetti, sono completamente disgiunti. Callable
si applica solo ai tipi di oggetto e include tutto, dai puntatori ai membri ai tipi con un sovraccarico operator()
per tipi con una conversione implicita ai puntatori di funzione ai puntatori di funzione stessi.
is_function
è vero solo per tipi di funzione effettivi, che sono, per definizione, non tipi di oggetto.
Non si applica anche alle funzioni "richiamabile"? –
@NeilKirk No, non secondo lo standard. Vedi [\ [func.wrap.func \]/2] (http://eel.is/c++draft/func.wrap.func#2) ("Un oggetto callable f di tipo F è Callable ... "), [\ [func.def \]/3-4] (http://eel.is/c++draft/function.objects#func.def-3) (" Un tipo callable è un tipo di oggetto funzione o un puntatore al membro. Un oggetto callable è un oggetto di tipo callable. "), e [\ [function.objects \]/1] (http://eel.is/c++draft/function.objects# 1) ("Un tipo di oggetto funzione è un tipo di oggetto che può essere il tipo dell'espressione postfissa in una chiamata di funzione.") –
LWG è [probabile che modifichi la dicitura qui] (http://wg21.link/lwg2393), ma non in un modo che influisce su questa risposta (eccetto forse rinominando "Callable" in "Lvalue-Callable"). –
- 1. Qual è la differenza tra std :: function e std :: mem_fn
- 2. Qual è la differenza tra std :: transform e std :: for_each?
- 3. Qual è la differenza tra std :: partial_sum e std :: inclusive_scan?
- 4. Qual è la differenza tra std :: movimento e std :: avanti
- 5. Qual è la differenza tra std :: cout e std :: wcout?
- 6. Qual è la differenza tra (tipo) valore e tipo (valore)?
- 7. qual è la differenza tra i modelli e il polimorfismo
- 8. In Typescript, qual è la differenza tra tipo e interfaccia?
- 9. Qual è la differenza tra ptr [i] e * (ptr + i)?
- 10. Qual è la differenza tra Future e FutureTask in Java?
- 11. Qual è la differenza tra un oggetto funzione e un oggetto callable?
- 12. ASP.NET MVC: Qual è la differenza di concetto tra Servizio e Deposito
- 13. Qual è il motivo della differenza nel comportamento di distruzione tra std :: unique_ptr e std :: shared_ptr?
- 14. qual è la differenza tra:.! e: r !?
- 15. Qual è la differenza tra {0} e +?
- 16. Qual è la differenza tra `##` e `hashCode`?
- 17. Qual è la differenza tra MIPS e RISC?
- 18. Qual è la differenza tra i pacchetti android.opengl e javax.microedition.khronos.opengles?
- 19. Qual è la differenza tra Verilog! e ~?
- 20. Qual è la differenza tra ("") e (null)
- 21. Qual è la differenza tra il callback e la promessa
- 22. Qual è la differenza tra .ToString() e + ""
- 23. Qual è la differenza tra il tipo nativo int e i tipi numpy.int?
- 24. Qual è la differenza tra dict() e {}?
- 25. Differenza tra std :: uninitialized_copy e std :: copy?
- 26. Qual è la differenza tra ssize_t e ptrdiff_t?
- 27. qual è la differenza tra [[], []] e [[]] * 2
- 28. Qual è la differenza tra? : e ||
- 29. Qual è la differenza tra i file apklib e jar?
- 30. Qual è la differenza tra i file .htc e .js?
beh, un oggetto con overload 'operator()' è chiamabile, ma non una funzione –
@ M.M Immagino che il problema sia dovuto al nome. Le funzioni * sono * callable, ma lo sono anche gli oggetti funzione. Peccato non ci sia un nome migliore ...? – VermillionAzure