Sto leggendo lo Effective C++ di Scott Meyers. Sta parlando di classi di tratti, ho capito che ho bisogno di loro per determinare il tipo di oggetto durante il tempo di compilazione, ma non riesco a capire la sua spiegazione su ciò che effettivamente fanno queste classi? (dal punto di vista tecnico)come funzionano le classi di caratteri?
risposta
Forse ti stai aspettando un qualche tipo di magia che faccia funzionare i tratti del carattere. In tal caso, sii deluso: non c'è magia. I tratti del tipo sono manualmente definiti per ciascun tipo. Ad esempio, considera iterator_traits
, che fornisce typedef (ad esempio value_type
) per gli iteratori.
Il loro utilizzo, è possibile scrivere
iterator_traits<vector<int>::iterator>::value_type x;
iterator_traits<int*>::value_type y;
// `x` and `y` have type int.
Ma per fare questo lavoro, non v'è in realtà un esplicita definizione da qualche parte nel <iterator>
intestazione, in cui si legge qualcosa di simile:
template <typename T>
struct iterator_traits<T*> {
typedef T value_type;
// …
};
Questa è una specializzazione parziale del del tipo iterator_traits
per i tipi del modulo T*
, ovvero i puntatori di qualche tipo generico.
Allo stesso modo, iterator_traits
sono specializzati per altri iteratori, ad es. typename vector<T>::iterator
.
Le classi di tratti fanno non determinare il tipo dell'oggetto. Al contrario, forniscono informazioni aggiuntive su un tipo, in genere definendo typedef o costanti all'interno del tratto.
+1 per combinare efficacemente teoria e implementazione. –
- 1. Le librerie di classi portatili funzionano con .net 3.5?
- 2. Come funzionano le goroutine?
- 3. Le classi Bootstrap non funzionano nel componente ReactJS
- 4. creati automaticamente le classi C# per XML deserializzazione non funzionano
- 5. Le estensioni dei caratteri non funzionano con JasperReports
- 6. Regex per abbinare e limitare le classi di caratteri
- 7. Come funzionano i costruttori di classi derivate in python?
- 8. Font di icone: come funzionano?
- 9. ES6 classi non funzionano su Chrome 47
- 10. Come funzionano le annotazioni dell'utente?
- 11. Come funzionano le animazioni Android?
- 12. Come funzionano le linee cache?
- 13. Come funzionano le stringhe Java
- 14. Come funzionano le icone Materialize?
- 15. Come funzionano le chiavi esterne?
- 16. Come funzionano le espressioni di query web2py?
- 17. come funzionano le notifiche di Facebook?
- 18. Come funzionano le migrazioni di Laravel?
- 19. Come funzionano le implementazioni di BigNums?
- 20. Come funzionano le istruzioni di assemblaggio MOVSX?
- 21. Come funzionano le sessioni di Spring Security?
- 22. Java Generics caratteri jolly con le classi più
- 23. Perché le classi e le funzioni vuote di Python funzionano come contenitori di dati arbitrari, ma non altri oggetti?
- 24. Come si usano le classi di caratteri di Emacs in un'espressione regolare?
- 25. Classi di caratteri e negazione con Regex
- 26. Come funzionano effettivamente le regole di esclusione di gitignore?
- 27. Esistono librerie REST che funzionano con le librerie di classi portatili?
- 28. Come funzionano le funzioni magiche e coercizione/magica di Python?
- 29. Come funzionano le chiamate AJAX con TWIG
- 30. Come funzionano le istruzioni sql-recursive?
+1 per nessuna magia. Anche se, non ci sono alcuni tratti (ad esempio nella libreria standard C++ 0x) che non possono essere definiti in modo affidabile usando solo il linguaggio, e che hanno bisogno di aiuto speciale "magico" dal compilatore per funzionare? – UncleBens
@UncleBens: non so quali tratti C++ 0x definisca, ma sono certo che non esistono tali caratteri prima di C++ 0x. –
Non è * ora * una specie di magia che funziona in ['std :: underlying_type'] (http://en.cppreference.com/w/cpp/types/underlying_type)? – Wolf